Laravel Post 请求空请求参数

Sal*_*man 4 php post laravel laravel-5

当我使用邮递员或我的应用程序发布到我的 API 端点时,request参数是一个空数组。

使用其他控制器发布请求工作正常并且request参数得到很好的处理。只有使用我的订单控制器才不会处理我的帖子正文。

我没有进行任何更改,恢复到较旧的提交也无济于事。

我现在不知道为什么它不接受 JSON 正文。

控制器

public function createOrder(Request $request)
{
    return $request->product_id;
}
Run Code Online (Sandbox Code Playgroud)

POST 正文| 原始 JSON

{
    "product_id": 4
}
Run Code Online (Sandbox Code Playgroud)

响应 响应是一个空数组 []"

我试图打印$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
}
Run Code Online (Sandbox Code Playgroud)

我的帖子正文是可见的,所以我很困惑为什么它没有显示

我的期望和我得到的

我希望请求返回我的 JSON 正文的值

发生了什么 没有返回

注意:我最近添加了通行证,但上次添加后使用此端点时效果很好laravel

工作控制器

public function store(Request $request)
{
    return $request;
}
Run Code Online (Sandbox Code Playgroud)

Api 路由

Route::post('order/create', 'OrderController@createOrder');
Route::post('product/create', 'ProductController@store');
Run Code Online (Sandbox Code Playgroud)

如果我echo $request在控制器中执行,我会看到请求中有数据,但我认为该格式不好:

POST /api/messages HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate, br
Authorization: Bearer 5|ibun75O2SNnZoT2W5Rk0KQox70wBxKN4xIIrq0sQ
Cache-Control: no-cache
Connection: keep-alive
Content-Length: 522
Content-Type: application/json
Host: localhost:8000
User-Agent: PostmanRuntime/7.26.10

{
    "text" : "Molestiae dolor non eaque aut sapiente maiores. Aut voluptates nesciunt. Cum distinctio quisquam qui vitae eos
asperiores.

Nihil iste quia. Voluptate deleniti ipsam voluptas alias similique doloremque. Ratione alias iste voluptatem quis. Quis
quia quo sequi minus quod voluptate cum similique dolor.

Maxime enim aut. Eius ea doloribus. Quaerat dolor libero ipsum. Delectus atque esse ipsam est.",
    "imageLink" : "http://placeimg.com/640/480/abstract",
    "typeID" : "232",
    "answerTypeID" : "919"
}
Run Code Online (Sandbox Code Playgroud)

viv*_*_23 6

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

  • 除了 @vivek_23 的正确答案之外,我发现在我的情况下,我的请求的字符编码是正确的,但我的实际正文包含对该请求无效的字符。由于 Laravel 期望收到的编码不同,所以(我推测)将正文转换为空字符串,这导致请求正文为空。本质上,消毒(如果是手动构建;感觉检查)您的实际身体内容! (2认同)