【问题标题】:ServiceStack Backbone.Todos Delete 405 not allowed不允许 ServiceStack Backbone.Todos 删除 405
【发布时间】:2012-09-25 05:58:58
【问题描述】:

我意识到当单击 Backbone.Todos 示例“清除 x 已完成的项目”时,我得到一个 DELETE 405 not allowed...

我从以前的帮助和文档中了解到,如果我想启用 DELETE PUT PATCH ...我需要设置

X-http-method-override : DELETE

如果它是一个表单或在 jquery 中。

但我不确定在 Backbone.Todos 示例中这是如何完成的,因为我是新的主干.js。

能否请您指出如何修复 DELETE 405 ?谢谢。

编辑---------------------------

我总是可以改变路线到...

[Route("/todos/add")] //C - post
[Route("/todos/{id}")] //R - get
[Route("/todos/{id}/edit")] //U - post
[Route("/todos/{id}/delete")] //D - post

因此,只有 Post 和 Get 足以完成这项工作。但与以下相比,它看起来不太安宁:

[Route("/todos/{id}", "Delete")] //D - delete

是吗?

【问题讨论】:

    标签: c# backbone.js servicestack http-status-code-405


    【解决方案1】:

    经过一番挖掘,我意识到这不是 Backbone 设置(顺便说一下,在 backbone.js 的第 34 行中 Backbone.emulateHTTP = false;)

    我检查了 Fiddler,它说:

    Module  WebDAVModule
    Notification  MapRequestHandler
    Handler  ServiceStack.Factory
    Error Code  0x00000000
    

    这是WebDAV 劫持并拒绝了mythz 怀疑的请求。然后我发现了如何从 web.config 中禁用 WebDAV:

      ...
      <system.webServer>
        <modules runAllManagedModulesForAllRequests="true">
          <remove name="WebDAVModule" />
        </modules>
        <validation validateIntegratedModeConfiguration="false"/>
        <handlers>
          <add path="*" name="ServiceStack.Factory" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*" preCondition="integratedMode" resourceType="Unspecified" allowPathInfo="true"/>
        </handlers>
      </system.webServer>
      ...
    

    现在它运行良好。谢谢!

    【讨论】:

      【解决方案2】:

      Backbone.js 对此有特殊支持,您可以通过以下方式启用:

      Backbone.emulateHTTP = true
      

      来自他们的网站:

      emulateHTTP Backbone.emulateHTTP = true

      如果您想使用不支持的旧版 Web 服务器 Backbones 默认的 REST/HTTP 方式,你可以选择开启 Backbone.emulateHTTP。设置此选项将伪造 PUT 和 DELETE 带有 HTTP POST 的请求,设置 X-HTTP-Method-Override 标头 用真正的方法。如果 emulateJSON 也打开了,true 方法将 作为附加的 _method 参数传递。

      Backbone.emulateHTTP = true;
      
      model.save();  // POST to "/collection/id", with "_method=PUT" + header.
      

      405 响应可能是在 IIS 中运行其他东西(如 WebDav)的结果,它会在请求到达 ServiceStack 之前劫持并拒绝请求。否则,如果它在客户端被拒绝,您可能需要 enable CORS 以允许发送额外的 HTTP 动词。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-06-21
        • 1970-01-01
        • 2013-12-25
        • 2014-12-29
        • 2018-01-25
        相关资源
        最近更新 更多