Laravel 5.2:POST请求总是返回"405 Method Not Allowed"

Jos*_*ury 6 php api post laravel

所以我正在用Laravel 5.2开发一个API,我面临着一个重要的问题.

我有一个UserController将管理我的应用程序的用户.

这是我的routes.php文件:

Route::group(array('prefix' => 'api/v1'), function() {    
   Route::post('user', 'UserController@store');
});
Run Code Online (Sandbox Code Playgroud)

我的UserController定义如下:

class UserController extends Controller {

   public function index() {
       return 'Hello, API';
   }

   public function create(){
   }

   public function store(Request $request) {
       $user = new User;
       $user->email = $request->email;
       $user->password = $request->password;
       $user->fbId = $request->fbId;
       $user->ggId = $request->ggId;
       $user->firstName = $request->firstName;
       $user->lastName = $request->lastName;
       $user->imageUrl = $request->imageUrl;
       $user->country = $request->country;
       $user->mobile = $request->mobile;
       $user->gender = $request->gender;
       $user->client = $request->client;

       $user->save();

       return Response::json(array(
           'error' => false,
           'userId' => $user->id),
           200
       );
   }

   public function update(Request $request, $id) {
   }
}
Run Code Online (Sandbox Code Playgroud)

这是输出 php artisan route:list

+--------+--------+-------------+------+-------------------------------------------+------------+
| Domain | Method | URI         | Name | Action                                    | Middleware |
+--------+--------+-------------+------+-------------------------------------------+------------+
|        | POST   | api/v1/user |      | App\Http\Controllers\UserController@store | web        |
+--------+--------+-------------+------+-------------------------------------------+------------+
Run Code Online (Sandbox Code Playgroud)

我正在使用Postman来测试我的POST请求.每次我向/ api/v1/user发出POST请求时,都会收到"405 Method Not Allowed"错误.

我错过了什么吗?

我有什么办法来解决这个问题吗?

bat*_*hir 16

我有同样的问题,我已经在我的POST路由中设置了例如"/ api/v1/user",

当我尝试使用POSTMAN(应用程序到测试API)进行连接时,它返回405-Method Not Allowed,

然后我意识到我发送的网址是使用' http ',然后我将其更改为' https '(后面的's')
然后我的API正常工作!

通常如果我们与不同的服务器进行交互,我们必须使用' https ',
但如果您的应用程序在同一台服务器上,
则可以使用' http '

我的情况的真正原因是任何与任何不同服务器的交互必须使用' https '(这是我服务器上的设置)


Enm*_*ada 7

您需要分隔您的路线,因为所有试图到达您的路线的用户都需要一个开放的会话(已登录)

试试这个

Route::group(array('prefix' => 'api/v1'), function() {

    Route::post('/','UserController@store');

    Route::get('/', 'UserController@index');

    Route::group(array('before' => 'auth.basic'), function() {

        Route::post('{user}', 'UserController@update');

    });
});
Run Code Online (Sandbox Code Playgroud)

您的授权用户路由应位于第二组中

并且您的405方法不允许$user->id更改它$request->user()->id


Bra*_*ten 5

缺少 CSRF 令牌

web-hooks创建路线时,我在 Laravel 5.8 上遇到了同样的问题。

这些路由使用Web 中间件,因此也包含了verifyCsrfToken 路由中间件组。(参考app/Http/Kernel.php

因为我的 POST 请求不包含CSRF 令牌,所以我们得到了这种奇怪的行为。

添加CSRF例外

为了解决这个问题,我需要为 Web-hooks 路由的VerifyCsrfToken 中间件添加一个例外。(参考app/Http/Middleware/VerifyCsrfToken.php

/**
 * The URIs that should be excluded from CSRF verification.
 *
 * @var array
 */
protected $except = [
    'web-hooks/*'
];
Run Code Online (Sandbox Code Playgroud)

使用API​​中间件

上述解决方案适用于使用Web中间件时。但是,如果您要创建 API 路由,最好使用 api 中间件,因为该中间件不使用 CSRF 验证。(参考app/Providers/RouteServiceProvider.php

    Route::prefix('api')
        ->middleware('api')
        ->namespace($this->namespace)
        ->group(base_path('routes/api.php'));
Run Code Online (Sandbox Code Playgroud)