首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果在请求中没有指定Accept-Type,如何获得不返回406的空值?

如果在请求中没有指定Accept-Type,如何获得不返回406的空值?
EN

Stack Overflow用户
提问于 2016-05-07 20:49:02
回答 1查看 244关注 0票数 0

我有一个钛机器人应用程序,可以显示来自URL的图像。我想用apigilty来服务这些图像。

我有一个流响应RPC服务,它可以在浏览器调用时工作。然而,在android上,它不工作,因为它似乎android ImageView不发送一个Accept-Type头,并且406 - Cannot honor Accept type specified拒绝调用。

是否有一种方法可以将我的智能项目配置为只对此RPC服务忽略Accept-Type检查?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-15 13:00:07

传入请求的Accept头在ZF\ContentNegotiationAcceptFilterListener类中进行检查,如果没有接受标头,则false,然后创建ApiProblemResponse

当然,最好的方法是确保在所有请求中都有一个accept标头,但是如果这是不可能的,您可以在所有请求中设置默认的accept。

您可以简单地通过在应用程序Module.php方法中添加以下内容来解决这个问题:

代码语言:javascript
复制
/**
 * {@inheritDoc}
 */
public function onBootstrap(MvcEvent $event)
{
    $application    = $event>getApplication();
    $eventManager   = $application->getEventManager();

    // Attach setDefaultAcceptHeader method with higher priority then AcceptFilterListener
    $eventManager->attach(MvcEvent::EVENT_ROUTE, [$this, 'setDefaultAcceptHeader'], 100);
}

/**
 * @var MvcEvent $event
 */
public function setDefaultAcceptHeader(MvcEvent $event)
{
    $request = $event->getRequest();

    if( ! $request instanceof \Zend\Http\Request){
        // Not a http request, return
        return;
    }
    // Check if we have an accept header, if not set to 'application/json'
    $headers = $request->getHeaders();
    if(!$headers->has('accept')){
        $headers->addHeaderLine('accept', 'application/json');
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37093552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档