Laravel发布请求为空请求参数

时间:2020-03-15 14:06:20

标签: php laravel laravel-5 post

当我用邮递员或我的应用程序发布到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');

2 个答案:

答案 0 :(得分:6)

添加Content-Type:application/json以使PHP理解其正在接收JSON。当前,您的Content-type看起来是空的。还要确保您传递的CSRF令牌正确。

答案 1 :(得分:0)

检查您的请求是否具有:

  1. 添加值为 Accept 的标题 application/json
  2. 如果正文是原始,请确保类型是JSON
  3. 如果正文是原始,请确保内容是有效的 JSON,并且不要在 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 的有效部分,但实际上是无效的。