我有一个钛机器人应用程序,可以显示来自URL的图像。我想用apigilty来服务这些图像。
我有一个流响应RPC服务,它可以在浏览器调用时工作。然而,在android上,它不工作,因为它似乎android ImageView不发送一个Accept-Type头,并且406 - Cannot honor Accept type specified拒绝调用。
是否有一种方法可以将我的智能项目配置为只对此RPC服务忽略Accept-Type检查?
发布于 2016-06-15 13:00:07
传入请求的Accept头在ZF\ContentNegotiationAcceptFilterListener类中进行检查,如果没有接受标头,则false,然后创建ApiProblemResponse。
当然,最好的方法是确保在所有请求中都有一个accept标头,但是如果这是不可能的,您可以在所有请求中设置默认的accept。
您可以简单地通过在应用程序Module.php方法中添加以下内容来解决这个问题:
/**
* {@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');
}
}https://stackoverflow.com/questions/37093552
复制相似问题