Postman由于未知原因被重定向,并且路由不起作用/Codeigniter 4



我可以看到邮递员由于某种原因被重定向了。我刚开始使用邮递员,所以不确定正常的请求会是什么样子。当我提出以下要求时;

POST https://development.example.com/Api/Register
form-data
KEY name
VALUE Thomas
KEY _method
VALUE PUT

出于某种原因,它会返回我网站的首页。当我查看apache2日志文件时,我可以看到:

124.xxx.xxx.xxx - - [27/Feb/2022:09:08:36 +0000] "POST /Api/Register HTTP/1.1" 303 5724 "-" "PostmanRuntime/7.28.4"
124.xxx.xxx.xxx - - [27/Feb/2022:09:08:36 +0000] "GET / HTTP/1.1" 200 8185 "https://development.example.com/Api/Register" "PostmanRuntime/7.28.4"

当我通过chrome这样的网络浏览器访问它时(当然我不能提交任何值(,我会得到预期的以下值;

{
"status": 500,
"message": {
"name": "The name field is required",
"email": "The email field is required",
"password": "The password field is required.",
"password_confirmation": "The password_confirmation field is required."
},
"error": true,
"data": []
}

波斯特曼,我做错了什么?

我的Users控制器是;

public function userRegister(){
$user = new UserEntity($this->request->getPost());
$user->startActivation();
if ($this->UserModel->insert($user)){
$this->sendActivationEmail($user);
$response =[
'status'    => 200,
'message'   => 'User registed.  Check email to activate account.',
'error'     => false,
'data'      => []
];
} else {
$response =[
'status'    => 500,
'message'   => $this->UserModel->errors(),
'error'     => true,
'data'      => []
];
}
return $this->respondCreated($response);
}

同样令人困惑的是,这条路线无法通过;

我的路由文件是;

$routes->group('Api', ["namespace" => 'AppControllersApiv1'] , function($routes){
$routes->post('Register', 'Users::userRegister');
});
https://development.example.com/Api/Register
Error;  Controller or its method is not found: AppControllersApiRegister::index
https://development.example.com/Api/v1/Users/userRegister 
This will work and give correct error like way above.

问题是,您实际上是在Postman(_method PUT(中发出PUT请求,但文件app/Config/Routes.php中的路由定义仅响应POST请求($routes->post('Register', 'Users::userRegister');(。

要修复此问题,请从Postman:中删除_methodPOST请求参数

POST https://development.example.com/Api/Register
form-data
KEY name
VALUE Thomas

附录

您问题中看似POSTPostman的请求被Codeigniter框架隐式解释为PUT请求,原因是HTTP方法欺骗

HTTP方法欺骗

使用HTML表单时,只能使用GET或POST HTTP谓词。在大多数情况下,这是很好的。但是,为了支持REST ful路由您需要支持其他更正确的动词,如DELETE或PUT。由于浏览器不支持此功能,CodeIgniter为您提供了欺骗正在使用的方法的方法。这允许您制作POST请求,但告诉应用程序应将其视为不同的请求类型。

为了欺骗该方法,会向具有名称的表单中添加一个隐藏输入CCD_ 9。它的值是您希望请求执行的HTTP谓词be:

<form action="" method="post">
<input type="hidden" name="_method" value="PUT" />
</form>

此表单被转换为PUT请求,是一个真正的PUT请求就路由和IncomingRequest类而言。

您正在使用的表单必须是POST请求。GET请求不能被欺骗。

相关内容

  • 没有找到相关文章

最新更新