我正在编写laravel api,当我尝试进行删除和发布请求时,我一直在获取方法不允许的异常。我应该去哪里诊断这个问题?
我已经阅读了有关此问题的大多数其他文章,这就是我尝试过/看过的内容。 •确保路由语法正确
•确保它与其他路线没有冲突
•确保使用正确的路由(运行php artisan route:list到 仔细检查)
•修改了.htaccess文件夹(也许我做错了)以允许GET,POST,PUT,DELETE
这是api.php中路由的样子
Route::middleware('auth:api')->get('/user', function (Request $request) {
return $request->user();
});
Route::delete('delete/{id}', 'LoginController@delete');
Route::get('stuff', 'LoginController@index');
Route::get('stuff1/{Username}', 'LoginController@show');
这是控制器中的功能
public function delete(Request $request, $id) {
$user = Login::find($id);
$user->delete();
return "204";
}
这是我的.htaccess
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
<Limit GET POST PUT DELETE>
Allow from all
</Limit>
</IfModule>
我可以通过将Route :: delete()更改为Route :: get()并实现相同的功能来解决此问题,但这似乎不是标准做法。
答案 0 :(得分:0)
您必须设置ajax类型POST,但发送一个名为_method的参数,其值具有delete,如下所示:
$.ajax({
type: "POST",
data:{
_method:"DELETE"
},
url: productRoute,
headers: { 'X-CSRF-TOKEN' : productToken }
});
或者因为您使用了laravel html表单帮助程序,所以它会自动生成_method隐藏输入,所以您最好发送所有表单输入,例如令牌和方法,如下所示:
function()
{
var formData=$('#yourForm').serialize();
$.ajax({
type: "POST",
url: productRoute,
data:formData
})
});