Yii2 REST 在 POST、PUT 等上给出 405
Yii2 REST giving a 405 on POST, PUT, etc
我正在尝试在 Yii2 高级应用程序中构建一个 REST API 来管理对我的数据库的简单查询。
按照一些教程,最终在快速入门指南中逐步构建示例,并让我的模型适用于 GET 和 HEAD 方法。
在模块内创建了我的 API 服务,正确设置,使用最少的设置,请求 backend/main 上的 JSON 解析器。php,在 [= 中注册了模块27=].php 并在 urlManager 中也创建了规则(低于最基本的规则,enablePrettyUrl,controller/action,...):
['class' => 'yii\rest\UrlRule', 'controller' => ['precapi']]
但是每当我通过 CURL 或 Postman REST Client 尝试其他方法时,它总是给我一个 405 错误:
Method Not Allowed. This url can only handle the following request
methods: GET, HEAD.
我想我已经尝试了很多不同的配置和路径试图解决它,但没有任何结果。
唯一的问题是 urlManager 中的 'enableStrictParsing' => false'
,因为它在某些 URL 上给了我一个 404 错误,并且 POST 也不适用于此,尽管应用程序照常工作。
如有任何帮助,我们将不胜感激。
问候。
如果没有关于你的 precapi 控制器基于什么的更多信息,我将假设它来自 \yii\rest\ActiveController
?
如果是这样,您可能需要覆盖控制器中的 verbs()
函数:
默认实现是这样的:
protected function verbs()
{
return [
'index' => ['GET', 'HEAD'],
'view' => ['GET', 'HEAD'],
'create' => ['POST'],
'update' => ['PUT', 'PATCH'],
'delete' => ['DELETE'],
];
}
我认为,鉴于您的评论,UrlManager 配置确实存在一个小问题,所以我出去阅读了一些东西,看到您将控制器添加到一个模块中。
The manual has this to say:
The controller ID (e.g. user, post-comment) that the rules in this composite rule are dealing with. It should be prefixed with the module ID if the controller is within a module (e.g. admin/user).
这可能是问题所在吗?
我认为是复数问题,试试这个
['class' => 'yii\rest\UrlRule', 'controller' => 'precapi', 'pluralize'=>false],
我在问这个问题,因为我遇到了这个问题,为了找到解决方案整天都在杀人。我非常愚蠢。
不是YII2框架的问题,是curl的问题。
不是某些控制器、动作或行为的问题,而是正确拼写 curl 命令的问题。
这是错误的命令 - 删除或放置不起作用并引发 405 错误:
curl -i -H "Accept:application/json" -H "Content-Type:application/json" -XDELETE "http://test.test.in/test" -d '{"myid": "2"}'
HTTP/1.1 405 方法不允许
服务器:nginx/1.8.1
日期:2016 年 6 月 26 日,星期日 07:47:51 GMT
内容类型:application/json;字符集=UTF-8
内容长度:0
连接:保持活动状态
X-Powered-By:PHP/5.6.22
允许:GET、POST、HEAD、OPTIONS
这是 curl 命令的正确方式:
curl -i -H "Accept:application/json" -H "Content-Type:application/json" -XDELETE "http://test.test.in/test/2"
HTTP/1.1 204 无内容
服务器:nginx/1.8.1
日期:2016 年 6 月 26 日,星期日 07:49:19 GMT
内容类型:application/json;字符集=UTF-8
内容长度:0
连接:保持活动状态
X-Powered-By: PHP/5.6.22
就这些,祝你好运!
我想添加我今天遇到的可能的问题和解决方案。它在 URL 中有额外的 /
类似 http://localhost:8080/index.php/module/controller_id/?access-token=_token_here
请注意 URL 中的 /
在 controller_id
之后是多么微妙
这是我的问题,我通过删除额外的 /
解决了
我正在尝试在 Yii2 高级应用程序中构建一个 REST API 来管理对我的数据库的简单查询。 按照一些教程,最终在快速入门指南中逐步构建示例,并让我的模型适用于 GET 和 HEAD 方法。
在模块内创建了我的 API 服务,正确设置,使用最少的设置,请求 backend/main 上的 JSON 解析器。php,在 [= 中注册了模块27=].php 并在 urlManager 中也创建了规则(低于最基本的规则,enablePrettyUrl,controller/action,...):
['class' => 'yii\rest\UrlRule', 'controller' => ['precapi']]
但是每当我通过 CURL 或 Postman REST Client 尝试其他方法时,它总是给我一个 405 错误:
Method Not Allowed. This url can only handle the following request methods: GET, HEAD.
我想我已经尝试了很多不同的配置和路径试图解决它,但没有任何结果。
唯一的问题是 urlManager 中的 'enableStrictParsing' => false'
,因为它在某些 URL 上给了我一个 404 错误,并且 POST 也不适用于此,尽管应用程序照常工作。
如有任何帮助,我们将不胜感激。 问候。
如果没有关于你的 precapi 控制器基于什么的更多信息,我将假设它来自 \yii\rest\ActiveController
?
如果是这样,您可能需要覆盖控制器中的 verbs()
函数:
默认实现是这样的:
protected function verbs()
{
return [
'index' => ['GET', 'HEAD'],
'view' => ['GET', 'HEAD'],
'create' => ['POST'],
'update' => ['PUT', 'PATCH'],
'delete' => ['DELETE'],
];
}
我认为,鉴于您的评论,UrlManager 配置确实存在一个小问题,所以我出去阅读了一些东西,看到您将控制器添加到一个模块中。
The manual has this to say:
The controller ID (e.g. user, post-comment) that the rules in this composite rule are dealing with. It should be prefixed with the module ID if the controller is within a module (e.g. admin/user).
这可能是问题所在吗?
我认为是复数问题,试试这个
['class' => 'yii\rest\UrlRule', 'controller' => 'precapi', 'pluralize'=>false],
我在问这个问题,因为我遇到了这个问题,为了找到解决方案整天都在杀人。我非常愚蠢。 不是YII2框架的问题,是curl的问题。 不是某些控制器、动作或行为的问题,而是正确拼写 curl 命令的问题。
这是错误的命令 - 删除或放置不起作用并引发 405 错误:
curl -i -H "Accept:application/json" -H "Content-Type:application/json" -XDELETE "http://test.test.in/test" -d '{"myid": "2"}'
HTTP/1.1 405 方法不允许 服务器:nginx/1.8.1 日期:2016 年 6 月 26 日,星期日 07:47:51 GMT 内容类型:application/json;字符集=UTF-8 内容长度:0 连接:保持活动状态 X-Powered-By:PHP/5.6.22 允许:GET、POST、HEAD、OPTIONS
这是 curl 命令的正确方式: curl -i -H "Accept:application/json" -H "Content-Type:application/json" -XDELETE "http://test.test.in/test/2"
HTTP/1.1 204 无内容 服务器:nginx/1.8.1 日期:2016 年 6 月 26 日,星期日 07:49:19 GMT 内容类型:application/json;字符集=UTF-8 内容长度:0 连接:保持活动状态 X-Powered-By: PHP/5.6.22
就这些,祝你好运!
我想添加我今天遇到的可能的问题和解决方案。它在 URL 中有额外的 /
类似 http://localhost:8080/index.php/module/controller_id/?access-token=_token_here
请注意 URL 中的 /
在 controller_id
这是我的问题,我通过删除额外的 /