我意识到当单击Backbone.Todos示例“清除x已完成的项目”时,我得到了一个DELETE 405 not allowed...
我从以前的帮助和文档中了解到,如果我想启用删除PUT补丁...我需要设置
X-http-method-override : DELETE
如果它是一个表单或jquery。
但我不确定如何在Backbone.Todos示例中做到这一点,因为我是backbone.js的新手。
您能指出如何修复删除的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足以完成这项工作。但与以下内容相比,它看起来并不是很Restful:
[Route("/todos/{id}", "Delete")] //D - delete是吗?
发布于 2012-10-04 22:23:12
Backbone.js对此有特殊支持,您可以通过以下方式启用:
Backbone.emulateHTTP = true来自他们的网站:
emulateHTTP Backbone.emulateHTTP = true
如果您想使用不支持Backbone默认REST/HTTP方法的遗留web服务器,您可以选择打开Backbone.emulateHTTP。设置此选项将使用HTTP POST伪造PUT和DELETE请求,使用true方法设置X-HTTP- method -Override标头。如果emulateJSON也为on,则true方法将作为附加的_method参数传递。
Backbone.emulateHTTP = true;
model.save(); // POST to "/collection/id", with "_method=PUT" + header.405响应可能是在IIS中运行的其他程序(如WebDav )的结果,这些程序将在请求到达ServiceStack之前劫持并拒绝请求。否则,如果它在客户端被拒绝,您可能希望使用enable CORS来允许发送额外的HTTP谓词。
发布于 2012-10-05 07:55:56
经过深入研究,我意识到这不是主干设置(顺便说一下,这是backbone.js的第34行中的Backbone.emulateHTTP = false; )
我查了Fiddler,上面写着:
Module WebDAVModule
Notification MapRequestHandler
Handler ServiceStack.Factory
Error Code 0x00000000正如mythz怀疑的那样,这是WebDAV劫持并拒绝了请求。然后我发现了如何在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>
...现在它很好地工作了。谢谢!
https://stackoverflow.com/questions/12723202
复制相似问题