Laravel 5.2:MethodNotAllowedException
Laravel 5.2 : MethodNotAllowedException
我在Laravel中定义了以下路由:
Route::group(['prefix' => 'api'], function() {
Route::post('login', [
'uses' => 'Auth\AuthController@login',
'as' => 'auth.login',
]);
});
我正在使用 Postman 发送这样的请求(您也可以看到结果):
为什么我会收到 MethodNotAllowed 异常????
我还尝试在一个空的 html 文件中创建一个表单,方法设置为 post。但得到了相同的结果。
编辑
如果我添加一个显示登录表单的 route::get,在 Postman 中的 post 请求之后它会显示该登录表单。
编辑 2:
我们路由条目的 php artisan route:list
输出:
+--------+----------+--------------+---------------------+----------------------------------------------------+------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+----------+--------------+---------------------+----------------------------------------------------+------------+
| | GET|HEAD | / | guest.home | App\Http\Controllers\GuestController@index | |
| | GET|HEAD | a/dashboard | admin.dashboard | Closure | |
| | POST | api/login | auth.login | App\Http\Controllers\Auth\AuthController@login | |
| | GET|HEAD | api/login | auth.login | Closure | |
| | GET|HEAD | api/logout | auth.logout | App\Http\Controllers\Auth\AuthController@getLogout | jwt.auth |
| | POST | api/register | auth.register | App\Http\Controllers\Auth\AuthController@register | jwt.auth |
| | GET|HEAD | m/dashboard | moderator.dashboard | Closure | |
| | GET|HEAD | pu/dashboard | premium.dashboard | Closure | |
| | GET|HEAD | u/dashboard | user.dashboard | Closure | |
+--------+----------+--------------+---------------------+----------------------------------------------------+------------+
编辑3
还有一件奇怪的事。如果我将方法设置为 Route::any,我摆脱了异常,但我无法访问 post 参数。即我没有任何 post 参数。
编辑 4:
如果我添加 route::get 并在那里显示登录视图并发送登录凭据,它就可以工作。但在 Postman 中没有。
在邮递员中使用x-www-form-urlencoded代替form-data,请看下面的区别。
form-data
multipart/form-data 是 Web 表单用于传输数据的默认编码。这模拟在网站上填写表格并提交。 form-data 编辑器允许您为数据设置 key/value 对(使用 key-value 编辑器)。您也可以将文件附加到密钥。请注意,由于 HTML5 规范的限制,文件不会存储在历史记录或集合中。您必须在发送请求时再次 select 文件。
urlencoded
此编码与 URL 参数中使用的编码相同。您只需输入 key/value 对,Postman 就会正确地对键和值进行编码。请注意,您不能通过这种编码方式上传文件。 form-data 和 urlencoded 之间可能存在一些混淆,因此请务必先检查您的 API。
不幸的是,问题出在 Postman3 上。我现在正在使用 Advanced REST Client,它工作正常。无论我选择什么方法,Postman 都会发送 GET 请求。
我在Laravel中定义了以下路由:
Route::group(['prefix' => 'api'], function() {
Route::post('login', [
'uses' => 'Auth\AuthController@login',
'as' => 'auth.login',
]);
});
我正在使用 Postman 发送这样的请求(您也可以看到结果):
为什么我会收到 MethodNotAllowed 异常???? 我还尝试在一个空的 html 文件中创建一个表单,方法设置为 post。但得到了相同的结果。
编辑
如果我添加一个显示登录表单的 route::get,在 Postman 中的 post 请求之后它会显示该登录表单。
编辑 2:
我们路由条目的 php artisan route:list
输出:
+--------+----------+--------------+---------------------+----------------------------------------------------+------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+----------+--------------+---------------------+----------------------------------------------------+------------+
| | GET|HEAD | / | guest.home | App\Http\Controllers\GuestController@index | |
| | GET|HEAD | a/dashboard | admin.dashboard | Closure | |
| | POST | api/login | auth.login | App\Http\Controllers\Auth\AuthController@login | |
| | GET|HEAD | api/login | auth.login | Closure | |
| | GET|HEAD | api/logout | auth.logout | App\Http\Controllers\Auth\AuthController@getLogout | jwt.auth |
| | POST | api/register | auth.register | App\Http\Controllers\Auth\AuthController@register | jwt.auth |
| | GET|HEAD | m/dashboard | moderator.dashboard | Closure | |
| | GET|HEAD | pu/dashboard | premium.dashboard | Closure | |
| | GET|HEAD | u/dashboard | user.dashboard | Closure | |
+--------+----------+--------------+---------------------+----------------------------------------------------+------------+
编辑3
还有一件奇怪的事。如果我将方法设置为 Route::any,我摆脱了异常,但我无法访问 post 参数。即我没有任何 post 参数。
编辑 4:
如果我添加 route::get 并在那里显示登录视图并发送登录凭据,它就可以工作。但在 Postman 中没有。
在邮递员中使用x-www-form-urlencoded代替form-data,请看下面的区别。
form-data
multipart/form-data 是 Web 表单用于传输数据的默认编码。这模拟在网站上填写表格并提交。 form-data 编辑器允许您为数据设置 key/value 对(使用 key-value 编辑器)。您也可以将文件附加到密钥。请注意,由于 HTML5 规范的限制,文件不会存储在历史记录或集合中。您必须在发送请求时再次 select 文件。
urlencoded
此编码与 URL 参数中使用的编码相同。您只需输入 key/value 对,Postman 就会正确地对键和值进行编码。请注意,您不能通过这种编码方式上传文件。 form-data 和 urlencoded 之间可能存在一些混淆,因此请务必先检查您的 API。
不幸的是,问题出在 Postman3 上。我现在正在使用 Advanced REST Client,它工作正常。无论我选择什么方法,Postman 都会发送 GET 请求。