2015-06-12 3 views
3

Недавно я модернизировал свой отдых сервер для ZF2 Apigility, что параметры содержания переговоров заключаются в следующем,Как не сделать ZF2 Apigilty принять запрос клиента с не Accept установлен в заголовке

'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', 
     ), 
    ), 

Проблема заключается в том, что мой клиент (мобильное приложение) уже развернуто, и они отправляют почтовые запросы без настройки поля «Принять» в заголовке http. поэтому я всегда получал следующие 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 в заголовке?

ответ

2

Вы можете написать прослушиватель, в котором вы проверяете заголовок Accept входящего запроса. Если нет заголовка Accept, вы можете добавить заголовок Accept со значением по умолчанию; например, 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'); 
} 

Лучше бы, конечно, чтобы обновить клиент.

+0

Спасибо! Я в конечном итоге взломал модуль согласования zf-content, AcceptFilterListener.php, добавленный выше кода, он работает! –

+0

имел ту же проблему, но с soapui: я добавил заголовок, и он работал – cwhisperer

 Смежные вопросы

  • Нет связанных вопросов^_^