【问题标题】:Error 405 (Method Not Allowed) Laravel 5错误 405(不允许的方法)Laravel 5
【发布时间】:2015-10-15 20:26:20
【问题描述】:

我正在尝试使用 jQuery 进行 POST 请求,但我收到错误 405(不允许的方法),我正在使用 Laravel 5

这是我的代码:

jQuery

<script type="text/javascript">
    $(document).ready(function () {
        $('.delete').click(function (e){
            e.preventDefault();
            var row = $(this).parents('tr');
            var id = row.data('id');
            var form = $('#formDelete');
            var url = form.attr('action').replace(':USER_ID', id);
            var data = form.serialize();
            $.post(url, data, function (result){
                alert(result);
            });
        });
    });
    </script>

HTML

{!! Form::open(['route' => ['companiesDelete', ':USER_ID'], 'method' =>'DELETE', 'id' => 'formDelete']) !!}

    {!!Form::close() !!}

控制器

public function delete($id, \Request $request){
        return $id;
    }

Jquery 错误是http://localhost/laravel5.1/public/empresas/eliminar/5405(不允许的方法)。

url值为

http://localhost/laravel5.1/public/empresas/eliminar/5

数据值为

_method=DELETE&_token=pCETpf1jDT1rY615o62W0UK7hs3UnTNm1t0vmIRZ.

如果我更改为$.get 请求,它可以正常工作,但我想做一个发布请求。

谁能帮帮我?

谢谢。

编辑!!

路线

Route::post('empresas/eliminar/{id}', ['as' => 'companiesDelete', 'uses' => 'CompaniesController@delete']);

【问题讨论】:

  • 签入你的路由文件,你可能会在路由中给出一个get方法,用post试试它会起作用的......

标签: php jquery laravel laravel-5


【解决方案1】:

如果您在开发过程中没有出现这样的错误,并且它仅在生产尝试中出现

php artisan route:list查看路由是否存在。

如果没有尝试

php artisan route:clear 清除缓存。

这对我有用。

【讨论】:

    【解决方案2】:

    在我的情况下,我的路由器中的路由是:

    Route::post('/new-order', 'Api\OrderController@initiateOrder')-&gt;name('newOrder');

    我从客户端应用程序将请求发布到:

    https://my-domain/api/new-order/

    所以,由于尾部斜线,我得到了 405。希望它可以帮助某人

    【讨论】:

      【解决方案3】:

      这可能会对某人有所帮助,所以我也会在这里输入我的意见。

      我遇到了相同(或类似)的问题。显然,问题是 POST 请求被 Modsec 通过以下规则阻止:350147、340147、340148、350148

      在阻止请求后,我被重定向到同一个端点,但当然是作为 GET 请求,因此是 405。

      我将这些规则列入白名单,瞧,405 错误消失了。

      希望这对某人有所帮助。

      【讨论】:

      • 谢谢!!就我而言,是规则 300016 导致了阻塞。
      • 在我的例子中,它是 REQUEST-911-METHOD-ENFORCEMENT.conf 规则
      【解决方案4】:

      在表单中使用delete方法时必须设置路由删除

      Route::delete("empresas/eliminar/{id}", "CompaniesController@delete");
      

      【讨论】:

        【解决方案5】:

        如果您使用的是资源路由,那么在表单的 HTML 正文中,您可以像这样使用 method_field helper

        <form>
          {{ csrf_field() }}
          {{ method_field('PUT') }}
          <!-- ... -->
        </form>
        

        它将使用方法类型创建隐藏的表单输入,Laravel 5.5+ 可以正确解释。

        从 Laravel 5.6 开始,您可以在模板中使用以下 Blade 指令:

        <form>
          @method('put')
          @csrf
          <!-- ... -->
        </form>
        

        希望这可能对将来的某人有所帮助。

        【讨论】:

          【解决方案6】:

          methodNotAllowed 异常表示您请求的 HTTP 方法不存在路由。

          您的表单设置为发出DELETE 请求,因此您的路由需要使用Route::delete() 来接收此请求。

          Route::delete('empresas/eliminar/{id}', [
                  'as' => 'companiesDelete',
                  'uses' => 'CompaniesController@delete'
          ]);
          

          【讨论】:

          • 但是他提出了一个 ajax 发布请求。和form方法有什么关系?
          • 这是一个post请求,但是op将包含method="delete"属性的表单数据序列化并通过ajax发布。
          • 我不明白。序列化只是一个字符串。
          • 当你在 Laravel 中使用 {!! Form::open( 'method' =&gt;'DELETE' ) !!} 时,它会自动添加一个名为 _method 的隐藏输入,并指定值,在本例中为 DELETE。 Laravel 会自动在每个请求中查找此参数,以确定它是 DELETE、POST、PATCH 还是 GET 请求。我建议阅读有关方法欺骗的 Laravel 文档。 laravel.com/docs/5.0/routing#method-spoofing
          • 啊,我明白了。你说的对。我不记得所有的文档了。
          【解决方案7】:

          您的 routes.php 文件需要正确设置。

          我假设您当前的设置是这样的:

          Route::post('/empresas/eliminar/{id}','CompanyController@companiesDelete');
          

          什么的。而是为 delete 方法定义一个路由。

          Route::delete('/empresas/eliminar/{id}','CompanyController@companiesDelete');
          

          现在,如果您使用的是 Route 资源,则用于“DELETE”方法的默认路由名称是 .destroy。而是在该函数中定义您的删除逻辑。

          【讨论】:

            猜你喜欢
            • 2018-07-06
            • 2017-09-03
            • 2017-11-13
            • 2019-07-29
            • 2018-01-25
            • 1970-01-01
            • 2021-12-20
            • 2018-03-07
            • 2017-11-28
            相关资源
            最近更新 更多