Apigility - 指定的内容类型无效
Apigility - Invalid content type specified
我正在尝试 post 将凭据登录到 apigility 登录 API:
$response = ClientStatic::post(
'http://www.example.com/api/login',
array('email' => 'test@eample.com','password' => 'test'),
array('Accept' => 'application/json')
);
这个returns错误:
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,
),
),
),
),
),
);
您确实在 zf-content-negotiation
配置中设置了 controllers
键并指向 Json
选择器。但是这个选择器没有配置。这可能是您问题的一部分。您也可以阅读此 in the zfcampus/zf-content-negotiation documentation。您应该添加如下内容:
'selectors' => array(
'Json' => array(
'ZF\ContentNegotiation\JsonModel' => array(
'application/json',
'application/*+json',
),
),
),
如果这不能解决您的问题,请添加评论...
您可以通过管理员 UI 在 [main menu] -> Content Negotiation -> [button] New selector
下添加新的 selector
和 add/delete/edit 选择器,例如向它们添加 ViewModel
s。
服务的内容协商设置在 [side menu] -> Foo API -> Bar service -> Content Negotiation
中可用。可以从内容列表中选择服务 Content Negotiation Selector
,并且可以编辑媒体类型
(删除似乎有问题而且不起作用——但无论如何它也可以在密钥 zf-content-negotiation
中的 module.config.php
中完成)。
这种情况下的解决方案是 运行 composer.phar 更新解决了问题。
我正在尝试 post 将凭据登录到 apigility 登录 API:
$response = ClientStatic::post(
'http://www.example.com/api/login',
array('email' => 'test@eample.com','password' => 'test'),
array('Accept' => 'application/json')
);
这个returns错误:
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,
),
),
),
),
),
);
您确实在 zf-content-negotiation
配置中设置了 controllers
键并指向 Json
选择器。但是这个选择器没有配置。这可能是您问题的一部分。您也可以阅读此 in the zfcampus/zf-content-negotiation documentation。您应该添加如下内容:
'selectors' => array(
'Json' => array(
'ZF\ContentNegotiation\JsonModel' => array(
'application/json',
'application/*+json',
),
),
),
如果这不能解决您的问题,请添加评论...
您可以通过管理员 UI 在 [main menu] -> Content Negotiation -> [button] New selector
selector
和 add/delete/edit 选择器,例如向它们添加 ViewModel
s。
服务的内容协商设置在 [side menu] -> Foo API -> Bar service -> Content Negotiation
中可用。可以从内容列表中选择服务 Content Negotiation Selector
,并且可以编辑媒体类型
(删除似乎有问题而且不起作用——但无论如何它也可以在密钥 zf-content-negotiation
中的 module.config.php
中完成)。
这种情况下的解决方案是 运行 composer.phar 更新解决了问题。