2016-05-07 13 views
0

我有一個顯示來自URL的圖像的Titanium Android應用程序。我想用apigilty來提供這些圖像。當請求中未指定Accept-Type時,如何獲得Apigility不返回406的問題

我有一個流響應RPC服務,它在瀏覽器中調用時起作用。然而,在Android上它不起作用,因爲它似乎android ImageView不會發送Accept-Type標頭,Apigiilty拒絕406 - Cannot honor Accept type specified的呼叫。

有沒有一種方法可以配置我的apigility項目,忽略僅用於此RPC服務的Accept-Type檢查?

回答

1

傳入請求的Accept頭的ZF\ContentNegotiationAcceptFilterListener類的內部檢查,如果沒有接受標頭存在the validateMediaType method returns false然後ApiProblemResponse創建at line 55

當然,最好的做法是確保在所有請求中都有一個接受標頭,但萬一這種情況不可行,您可以在所有請求中設置一個默認接受標頭。

/** 
* {@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'); 
    } 
} 

您只需在應用程序中添加此Module.php方法解決呢

相關問題