php - 如何使 Zf2 Apigilty 接受 header 中未设置接受的客户端请求

标签 php zend-framework2 laminas-api-tools content-negotiation

最近我把我的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/

相关文章:

php - PHP session 的 JavaScript 重定向问题

mysql - ZF2 aka Apigility 更新 SQL 数据库条目

zend-framework2 - 如何在 Apigility 中检查 oAuth2 范围?

php - CakePHP + TinyButStrong

php - 如何正确终止 zend 框架中的 session ?

java - 从模数和指数重建 RSA 私钥失败

php - ZF2 LDAP SSL 证书不受信任

php - Zend 2-理论如何为三个实体一对多插入?

doctrine-orm - 确定 Composer 子依赖

postman - ApiGility - PostMan 中的 JSON 解码错误 : Syntax error, 格式错误的 JSON