2015-05-22 43 views
1

我試圖張貼登錄憑據的apigility登錄API:Apigility - 無效的內容類型指定

$response = ClientStatic::post(
     'http://www.example.com/api/login', 
     array('email' => '[email protected]','password' => 'test'), 
     array('Accept' => 'application/json') 
    ); 

這將返回錯誤:

Cannot honor Accept type specified

據我所知,application/json有已被列入白名單中的配置:

任何想法?

我Apigility配置:

<?php 
return array(
    'controllers' => array(
     'factories' => array(
      'Api\\V1\\Rpc\\Login\\Controller' => 'Api\\V1\\Rpc\\Login\\LoginControllerFactory', 
     ), 
    ), 
    'router' => array(
     'routes' => array(
      'api.rpc.login' => array(
       'type' => 'Segment', 
       'options' => array(
        'route' => '/api/login', 
        'defaults' => array(
         'controller' => 'Api\\V1\\Rpc\\Login\\Controller', 
         'action' => 'login', 
        ), 
       ), 
      ), 
     ), 
    ), 
    'zf-versioning' => array(
     'uri' => array(
      0 => 'api.rpc.login', 
     ), 
    ), 
    'zf-rpc' => array(
     'Api\\V1\\Rpc\\Login\\Controller' => array(
      'service_name' => 'Login', 
      'http_methods' => array(
       0 => 'POST', 
       1 => 'GET', 
      ), 
      'route_name' => 'api.rpc.login', 
     ), 
    ), 
    'zf-content-negotiation' => array(
     'controllers' => array(
      'Api\\V1\\Rpc\\Login\\Controller' => 'Json', 
     ), 
     'accept_whitelist' => array(
      'Api\\V1\\Rpc\\Login\\Controller' => array(
       0 => 'application/vnd.api.v1+json', 
       1 => 'application/json', 
       2 => 'application/*+json', 
      ), 
     ), 
     'content_type_whitelist' => array(
      'Api\\V1\\Rpc\\Login\\Controller' => array(
       0 => 'application/vnd.api.v1+json', 
       1 => 'application/json', 
      ), 
     ), 
    ), 
    'zf-content-validation' => array(
     'Api\\V1\\Rpc\\Login\\Controller' => array(
      'input_filter' => 'Api\\V1\\Rpc\\Login\\Validator', 
     ), 
    ), 
    'input_filter_specs' => array(
     'Api\\V1\\Rpc\\Login\\Validator' => array(
      0 => array(
       'required' => true, 
       'validators' => array(
        0 => array(
         'name' => 'Zend\\Validator\\EmailAddress', 
         'options' => array(
          'useDomainCheck' => true, 
         ), 
        ), 
       ), 
       'filters' => array(), 
       'name' => 'email', 
       'description' => 'Email address', 
       'error_message' => 'Email address error', 
      ), 
      1 => array(
       'required' => true, 
       'validators' => array(), 
       'filters' => array(), 
       'name' => 'password', 
       'description' => 'Password required', 
       'error_message' => 'Password error', 
      ), 
     ), 
    ), 
    'zf-mvc-auth' => array(
     'authorization' => array(
      'Api\\V1\\Rpc\\Login\\Controller' => array(
       'actions' => array(
        'Login' => array(
         'GET' => false, 
         'POST' => false, 
         'PUT' => false, 
         'PATCH' => false, 
         'DELETE' => false, 
        ), 
       ), 
      ), 
     ), 
    ), 
); 

回答

0

這種情況下的解決方案是運行composer.phar更新來解決問題。

1

你做了設置在zf-content-negotiation配置,並指向一個Json選擇一個controllers關鍵。但是這個選擇器沒有配置。這可能是你的問題的一部分。您還可以閱讀關於此in the zfcampus/zf-content-negotiation documentation。你應該添加類似:

'selectors' => array(
    'Json' => array(
     'ZF\ContentNegotiation\JsonModel' => array(
      'application/json', 
      'application/*+json', 
     ), 
    ), 
), 

如果不解決您的問題,請添加評論...

+0

謝謝 - 我正在使用wysiwig管理員創建我的api。這是從那裏控制,還是我需要手動添加?謝謝 – HappyCoder

1

您可以在在管理用戶界面添加一個新的selector[main menu] -> Content Negotiation -> [button] New selector

enter image description here

並在那裏添加/刪除/編輯選擇器,例如向他們添加ViewModel

服務的內容協商設置可在[side menu] -> Foo API -> Bar service -> Content Negotiation中找到。那裏可以從內容和媒體類型的列表中選擇該服務的Content Negotiation Selector可編輯

enter image description here

(刪除似乎是車,而不是工作 - 但無論如何,它也可以在module.config.php完成在密鑰zf-content-negotiation)。

相關問題