2016-05-07 18 views
0

Ich habe eine Titanium Android App, die Bilder von URLs anzeigt. Ich möchte apigilty verwenden, um diese Bilder zu dienen.Wie bekomme ich Apigility, um 406 nicht zurückzugeben, wenn kein Accept-Type in der Anfrage angegeben ist

Ich habe einen Stream-Response-RPC-Dienst, der funktioniert, wenn er von einem Browser aufgerufen wird. Aber auf Android funktioniert es nicht, wie es scheint, das Android ImageView sendet keine Accept-Type Header und Apigiilty weist den Anruf mit einem 406 - Cannot honor Accept type specified zurück.

Gibt es eine Möglichkeit, mein Apigility-Projekt zu konfigurieren, um die Accept-Type Prüfung nur für diesen RPC-Dienst zu ignorieren?

Antwort

1

Der Accept Header der eingehenden Anforderung wird innerhalb der ZF\ContentNegotiationAcceptFilterListener Klasse überprüft und, wenn keine Header vorhanden ist the validateMediaType method returns false akzeptieren und dann wird die ApiProblemResponseat line 55 erstellt.

Die beste wäre natürlich, um sicherzustellen, dass Sie einen Akzeptieren Header in alle Ihre Anfragen erhalten, aber falls dies irgendwie unmöglich ist, könnten Sie einen Standard akzeptieren Header in all Ihren Anfragen.

Sie können es einfach lösen, indem Sie diese in Ihrer Anwendung Module.php Methode:

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