当我用邮递员或我的应用程序发布到API端点时,request
参数是一个空数组。
使用其他控制器,发布请求可以正常工作,并且request
参数得到很好的处理。
只有使用我的订单控制器,我的帖子主体才会得到处理。
我没有进行任何更改,恢复到较早的提交也没有帮助。
我不知道为什么它不接受JSON正文。
控制器
public function createOrder(Request $request)
{
return $request->product_id;
}
POST正文 | 原始JSON
{
"product_id": 4
}
响应 响应是一个空数组[]“
我尝试打印$request
,并且得到了答复
POST /api/order/post HTTP/1.1
Accept: application/json
Accept-Encoding: gzip, deflate, br
Authorization: Bearer.{token}
Cache-Control: no-cache
Connection: keep-alive
Content-Length: 20
Content-Type:
Cookie: XSRF-TOKEN={Token}%3D%3D; laravel_session=%3D%3D
Host: backend.host
User-Agent: PostmanRuntime/7.22.0
Cookie: XSRF-TOKEN==={token}; laravel_session={Token}
{
"product_id": 4
}
然后我的帖子正文可见,所以我很困惑为什么它不显示
我期望和得到的东西
我希望请求返回我的JSON正文的值
正在发生的事情一无所获
注意:我最近添加了护照,但是上次我在添加laravel之后使用此终结点时工作正常
工作控制器
public function store(Request $request)
{
return $request;
}
Api路线
Route::post('order/create', 'OrderController@createOrder');
Route::post('product/create', 'ProductController@store');
答案 0 :(得分:6)
添加Content-Type:application/json
以使PHP理解其正在接收JSON。当前,您的Content-type
看起来是空的。还要确保您传递的CSRF令牌正确。
答案 1 :(得分:0)
检查您的请求是否具有:
Accept
的标题 application/json
。例如:
这有效:JSON 类型的原始正文:
{
"email": "{{email}}",
"password": "{{password}}"
}
这不起作用:即使是 JSON 类型的原始正文:
{
"email": "{{email}}", // Eg. superadmin@example.com <-- This invalidates the JSON
"password": "{{password}}" // Eg. password <-- This invalidates the JSON
}
请注意,在 Postman 中,JSON 注释在视觉/语法上呈现为 JSON 的有效部分,但实际上是无效的。