不允许 ServiceStack Backbone.Todos 删除 405
Posted
技术标签:
【中文标题】不允许 ServiceStack Backbone.Todos 删除 405【英文标题】:ServiceStack Backbone.Todos Delete 405 not allowed 【发布时间】: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
是吗?
【问题讨论】:
【参考方案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 动词。
【讨论】:
以上是关于不允许 ServiceStack Backbone.Todos 删除 405的主要内容,如果未能解决你的问题,请参考以下文章
覆盖Backbone.ajax方法以使用cordovaHTTP
ServiceStack 的 JsonSerializer 可以序列化私有成员吗?
.net Redis 消息中间件 ServiceStack.Redis 轻量级