使用邮递员的 PUT/PATCH 请求在 Laravel 中返​​回状态码 0

Posted

技术标签:

【中文标题】使用邮递员的 PUT/PATCH 请求在 Laravel 中返​​回状态码 0【英文标题】:PUT/PATCH request with postman returns status code 0 in Laravel 【发布时间】:2015-08-26 19:58:11 【问题描述】:

我已经编写了一些 REST API 方法,包括用于更新数据库条目的方法:

// Update
public function update(CreateAEDRequest $request, $id) 
    $aed = AED::find($id);

    if(!$aed) 
        return response()->json(['message' => "Dieser AED exisitiert nicht", 'code' => 404], 404);
    

    $owner = $request->get('owner');
    $street = $request->get('street');

    $aed->owner = $owner;
    $street->street = $street;

    $aed->save();

    return response()->json(['message' => 'Der AED wurde aktualisiert'], 200);

路线定义为:

    Route::put('/aeds/aeds', 'APIAEDController@update');
    Route::patch('/aeds/aeds', 'APIAEDController@update');

一个请求正在被处理:

<?php

namespace App\Http\Requests;

use App\Http\Requests\Request;
use Illuminate\Http\JsonResponse;

class CreateAEDRequest extends Request

    public function authorize()
    
        // turn back to false when doing auth
        return true;
    

    public function rules()
    
        return [
            'owner'  => 'required',
            'street' => 'required'
        ];
    


但是当我使用邮递员并尝试更新现有的数据库条目并根据要求填写要在邮递员中发送的所有者和街道变量时,我收到消息:“无法获得任何响应。返回状态代码 0”

所有其他方法都可以正常工作。难道我的路由定义不正确?

更新 当我以x-www-form-urlencoded发送数据时,它可以工作!当我将它们作为表单数据发送时,它会显示错误消息。

【问题讨论】:

当您编码为表单数据时,$id 是否为空?通常你会用与路由参数相同的名称来调用你的变量,但我不确定这是否是基本需求。 对于 put/patch,您需要以 x-www-form-urlencoded 形式发送数据 【参考方案1】:

在过去的几天里,我也在为此苦苦挣扎。 有同事发现可以使用 Request 的 input() 函数来收集参数。

使用您的 Postman 示例,您可以执行以下操作:

Postman Example - ***

然后在 Laravel 中你可以像这样访问数据:

// Not sure if you might need to swap the $id with the $request parameters.
// Try and swap them if you are not getting the correct data
public function update($id, CreateAEDRequest $request) 
    $aed = AED::find($id);

    if(!$aed) 
        return response()->json([
            'message' => "Dieser AED exisitiert nicht", 'code' => 404
          ], 404);
    

    // USE the input() function here to read the data sent from Postman request
    $owner = $request->input('owner');
    $street = $request->input('street');

    $aed->owner = $owner;
    $street->street = $street;

    $aed->save();

    return response()->json(['message' => 'Der AED wurde aktualisiert'], 200);

PS:我使用的是 Laravel 8.65 和 Postman v9.0.8

【讨论】:

【参考方案2】:

Postman

    将方法更改为POST 添加新变量_method,其值为PUTPATCH

【讨论】:

【参考方案3】:

在 Postman 中,您应该指出您发送的数据是 x-www-url-formurlencoded

【讨论】:

以上是关于使用邮递员的 PUT/PATCH 请求在 Laravel 中返​​回状态码 0的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Yandex Tank 中发出 PUT/PATCH/DELETE 请求?

post、get、put、patch、Delete的区别

Django REST framework框架之GET, POST, PUT, PATCH, DELETE等API请求接口设计

如何发送一个PUT / DELETE请求jQuery的

使用jmeter发送put请求的三种方式

NoHttp框架