最近我把我的rest服务器升级到Zf2 Apigility,内容协商设置如下,
'zf-content-negotiation' => array(
'controllers' => array(
'CloudSchoolBusFileApi\\V1\\Rest\\FileReceiver\\Controller' => 'Json',
),
'accept_whitelist' => array(
'CloudSchoolBusFileApi\\V1\\Rest\\FileReceiver\\Controller' => array(
0 => 'application/vnd.cloud-school-bus-file-api.v1+json',
1 => 'application/json',
),
),
'content_type_whitelist' => array(
'CloudSchoolBusFileApi\\V1\\Rest\\FileReceiver\\Controller' => array(
0 => 'application/vnd.cloud-school-bus-file-api.v1+json',
1 => 'application/json',
2 => 'multipart/form-data',
),
),
问题是我的客户端(移动应用程序)已经部署,并且他们发送的 post 请求在 http header 中没有接受字段设置。所以我总是从服务器收到以下 406 错误,
[Response] => Array
(
[statusCode] => 406
[content] => {"type":"http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html","title":"Not Acceptable","status":406,"detail":"Cannot honor Accept type specified"}
)
所以有人知道如何让服务器接受来自客户端的此类请求,而头中没有 Accept 吗?
最佳答案
您可以编写一个监听器,在其中检查传入请求的 Accept
header 。如果未设置 Accept
header ,您可以添加一个具有默认值的 Accept
header ;例如 application/json
。
所以像这样:
/**
* Set empty accept header by default to `application/json`
*
* @param MvcEvent $event
* @return void|ApiProblemResponse
*/
public function onRoute(MvcEvent $event)
{
$request = $event->getRequest();
$headers = $request->getHeaders();
if($headers->has('Accept')){
// Accept header present, nothing to do
return;
}
$headers->addHeaderLine('Accept', 'application/json');
}
当然,更新您的客户端会更好。
关于php - 如何使 Zf2 Apigilty 接受 header 中未设置接受的客户端请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30794178/