Php Laravel 5.2:POST请求总是返回;405“不允许使用方法”;
所以我正在用Laravel5.2开发一个API,我面临一个重要的问题 我有一个UserController,它将管理我的应用程序的用户 这是我的routes.php文件:Php Laravel 5.2:POST请求总是返回;405“不允许使用方法”;,php,api,laravel,post,Php,Api,Laravel,Post,所以我正在用Laravel5.2开发一个API,我面临一个重要的问题 我有一个UserController,它将管理我的应用程序的用户 这是我的routes.php文件: Route::group(array('prefix' => 'api/v1'), function() { Route::post('user', 'UserController@store'); }); 我的UserController定义如下: class UserController extend
Route::group(array('prefix' => 'api/v1'), function() {
Route::post('user', 'UserController@store');
});
我的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) {
}
}
这是php artisan route:list的输出
+--------+--------+-------------+------+-------------------------------------------+------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+--------+-------------+------+-------------------------------------------+------------+
| | POST | api/v1/user | | App\Http\Controllers\UserController@store | web |
+--------+--------+-------------+------+-------------------------------------------+------------+
我用邮递员来测试我的邮件请求。
每次我向/api/v1/user发出POST请求时,都会出现“405方法不允许”错误
我错过什么了吗
我应该做些什么来解决这个问题?您需要分离您的路由,因为所有试图访问您的路由的用户都需要一个打开的会话(已登录) 试试这个
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');
});
});
您的授权用户路由应在第二组中
不允许您的405方法是
$user->id
将其更改为$request->user()->id
以前遇到过类似的情况,调试后发现这是邮递员问题,与代码无关
因此,打开终端并尝试使用curl发出相同的请求:
curl -X POST -H "Accept: application/json" -F "email=test@test.com" -F "password=secret" -F "firstName=Mahmoud" -F "lastName=Zalt" ....... "http://your-domain.com/api/v1/user"
如果这起作用,意味着你必须改变邮递员本身的一些设置。
真的不记得我对它做了什么!但这就像更改一些默认标题或删除授权类型一样简单…经过长时间的挖掘,我找不到任何解决问题的方法 我必须从头开始创建一个新的Laravel项目,并在旧项目中添加所有内容。令我惊讶的是,一切都很完美,我仍然不明白为什么
无论如何,感谢所有在这方面尽力帮助的人:)干杯 如果对任何人都有帮助的话,我也有同样的问题;出于某种原因,多种因素综合起来解决了这个问题
NotFoundHttpException
,这是因为我没有在post请求中发送我的“api_令牌”此错误也可能由请求正文太大引起。在我的例子中,我无意中发送了一个包含许多子对象的对象,这些子对象都有许多其他子对象。删减我的请求数据解决了这个问题。我与您有相同的问题,我已经在我的发布路线中设置了这些问题,例如“/api/v1/user”,
当我尝试使用POSTMAN(测试API的应用程序)连接时,它返回405 Method Not Allowed 然后我意识到我发送的url使用的是“http”,在我将其更改为“https”后(后面是“s”)
然后我的API正常工作!
通常,如果我们与不同的服务器交互,我们必须使用“https”
但是如果您的应用程序位于同一服务器上,则可以使用“http”
我这样做的真正原因是与任何不同服务器的任何交互都必须使用“https”(这是我服务器上的设置)更改为https将使其工作。至少,这是我的经历。在http中使用POSTman总是有这种效果。检查两侧的请求类型
GET/POST/PUT/PATCH
i、 e.前端(Javascript/Typescript等
)以及后端(Laravel Passport
)应该相同。缺少CSRF令牌
在创建webhook
routes时,我在Laravel5.8上遇到了同样的问题
这些路由使用web中间件,因此,还包括VerifyCsrfToken路由中间件组。(参考app/Http/Kernel.php
)
因为我的POST请求不包含CSRF令牌,我们得到了这种奇怪的行为
添加CSRF异常
为了解决这个问题,我需要为web hooks路由使用VerifyCsrfToken中间件。(参考app/Http/Middleware/VerifyCsrfToken.php
)
使用API中间件
上述解决方案适用于使用web中间件的情况。但是,如果要创建API路由,最好使用API中间件,因为此中间件中不使用CSRF验证。(参考app/Providers/RouteServiceProvider.php
)
在我的例子中,我没有在控制器的名称中添加控制器单词为什么要使用
Route::resource('user','UserController')代码>而非路由::post('user','userController@store)
?@Kisaragi-如果我使用Route::post('user','UserController@store)
我得到“405方法不允许”。每次都是调用索引方法。请只评论一次索引方法,然后查看结果。也许它有用@我认为它不应该每次都调用index()。还有,如果我这样做,我会得到一个“500内部服务器错误”。你能试着删除组中的“之前”过滤器,看看它是否有效吗?我假设你从邮递员那里来时没有得到授权。是的,你完全正确,但我刚开始这个项目,我仍然没有将需要身份验证的端点与不需要身份验证的端点分开。你可能需要开始使用中间件Route::group(['middleware'=>'auth'],function(){…})代码>我会:)谢谢you@JosephELKHOURY405不允许的方法是<代码> $USER > ID\代码>更改它为<代码> $Quest-USER()-> ID @ JojEffelkHouy记得保存<代码> $Up> > Save](代码)> MMM尝试查看HTTP中间件或启用COSs,您应该考虑将您的答案切换到正确的答案,谢谢。你是什么意思?删除一个Laravel实例,从头开始,从你得到的所有答案来看,这将是最好的答案?我对此表示怀疑。删除你的答案,然后选择一个可行的答案。没有一个答案能解决这个问题。我绝对不会将它们标记为“正确”答案并误导用户。没有人建议你标记错误的答案,你的逻辑是错误的。你选择了自己的答案,上面写着“cre
Route::group(['prefix'=>'api/v1'], function () {
Route::post('/', 'IndexController@index')->middleware('auth:api');
});
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
'web-hooks/*'
];
Route::prefix('api')
->middleware('api')
->namespace($this->namespace)
->group(base_path('routes/api.php'));