【问题标题】:Error (405) Method Not Allowed when using POST使用 POST 时错误 (405) 方法不允许
【发布时间】:2018-02-16 16:34:53
【问题描述】:

我正在使用带有 JWTAuth 和 Dingo 的 Laravel 5.4,由于某种原因,我现在不再能够使用 Postman 发出 POST 请求。这在我第一次设置时有效,但没有得到响应 405 Method Not Allowed 这似乎已经在这里提出了几次,但我似乎无法找到解决方案。我已经清除了路由缓存,当我执行 api:routes 时,正确的路由就在那里。

下面是路由文件,以及它应该发送的控制器。我只遇到了 LeadController 路由的问题。

api.php

use Dingo\Api\Routing\Router;

/** @var Router $api */
$api = app(Router::class);

$api->version('v1', function (Router $api) {
    $api->group(['prefix' => 'auth'], function(Router $api) {
        //$api->post('signup', 'App\\Api\\V1\\Controllers\\SignUpController@signUp');
        $api->post('login', 'App\\Api\\V1\\Controllers\\LoginController@login');

        $api->post('recovery', 'App\\Api\\V1\\Controllers\\ForgotPasswordController@sendResetEmail');
        $api->post('reset', 'App\\Api\\V1\\Controllers\\ResetPasswordController@resetPassword');
    });

    $api->group(['middleware' => 'jwt.auth'], function(Router $api) {
        $api->get('protected', function() {
            return response()->json([
                'message' => 'Access to protected resources granted! You are seeing this text as you provided the token correctly.'
            ]);
        });

        $api->get('refresh', [
            'middleware' => 'jwt.refresh',
            function() {
                return response()->json([
                    'message' => 'By accessing this endpoint, you can refresh your access token at each request. Check out this response headers!'
                ]);
            }
        ]);

        $api->post('lead/store', 'App\\Api\\V1\\Controllers\\LeadController@store');
        $api->get('lead', 'App\\Api\\V1\\Controllers\\LeadController@index');

    });
});

LeadController.php

namespace App\Api\V1\Controllers;

use Symfony\Component\HttpKernel\Exception\HttpException;
use Tymon\JWTAuth\JWTAuth;
use App\Http\Controllers\Controller;
use Dingo\Api\Routing\Helpers;
use Illuminate\Http\Request;
use Carbon\Carbon;
use App\Lead;
use App\User;

class LeadController extends Controller
{
    use Helpers;

    public function index(Lead $leads)
    {
        $leads = $leads->all();

        $count = 0;
        foreach($leads as $key => $lead){
            $user = User::where('id', $lead->user_id)->first();
            $leads[$count]['name'] = $user->name;

            array_pull($leads[$count], 'user_id');
            $count++;
        }

        return $leads;
    }

    public function store(Request $request)
    {

        $today = new Carbon();

        $this->validate(request(), [
            'owner' => 'required',
            'bname' => 'required|min:3|max:255',
            'tname' => 'max:255',
            'created' => 'required|date|before_or_equal:today',
            'update' => 'date'
        ]);

        if(!$user = User::where('zoho_id', $request->get('owner'))->first())
            return $this->response->error('invalid_owner', 500);

        $lead = new Lead;
        $lead->user_id = $user->id;
        $lead->bname = $request->get('bname');
        $lead->tname = $request->get('tname');
        $lead->created_at = $request->get('created');
        $lead->updated_at = $request->get('updated');

        if($lead->save())
            return $this->response->created();
        else
           return $this->response->error('could_not_create_lead', 500);
    }
}

【问题讨论】:

    标签: php laravel-5 routes dingo-api


    【解决方案1】:

    我找到了答案,而我几乎写完这个问题,却偶然发现了这里的答案: https://laracasts.com/discuss/channels/laravel/dingo-api-and-postman-not-matching-post-request

    从请求 URL 中删除尾随 /。所以将这个答案留在这里,希望它可能对某人有用。

    即。 http://api.someurl.app/api/lead/store?token=....

    也许,有人可以建议一种允许尾随 / ??

    【讨论】:

      猜你喜欢
      • 2012-08-24
      • 2019-07-05
      • 2013-12-05
      • 2012-10-26
      • 1970-01-01
      • 1970-01-01
      • 2017-10-16
      • 2016-02-15
      • 2014-04-18
      相关资源
      最近更新 更多