Tom*_*Tom 6 c# http-status-code-405 backbone.js servicestack
我意识到点击Backbone.Todos示例"清除x已完成的项目"我得到DELETE 405不允许...
我从以前的帮助和文档中了解到,如果我想启用DELETE PUT PATCH ...我需要设置
X-http-method-override : DELETE
如果它是一个表格或jquery.
但我不确定如何在Backbone.Todos示例中完成此操作,因为我是backbone.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
Run Code Online (Sandbox Code Playgroud)
所以,只有Post和Get足以完成这项工作.但与以下相比,它看起来并不十分宁静:
[Route("/todos/{id}", "Delete")] //D - delete
Run Code Online (Sandbox Code Playgroud)
可以?
Backbone.js对此有特殊支持,您可以通过以下方式启用:
Backbone.emulateHTTP = true
Run Code Online (Sandbox Code Playgroud)
从他们的网站:
如果您想使用不支持Backbones的默认REST/HTTP方法的旧Web服务器,您可以选择打开Backbone.emulateHTTP.设置此选项将使用HTTP POST伪造PUT和DELETE请求,使用true方法设置X-HTTP-Method-Override标头.如果同时启用了emulateJSON,则true方法将作为附加的_method参数传递.
Backbone.emulateHTTP = true;
model.save(); // POST to "/collection/id", with "_method=PUT" + header.
Run Code Online (Sandbox Code Playgroud)
405响应可能是因为在IIS中运行其他东西,如WebDav,它会在请求到达ServiceStack之前劫持并拒绝请求.否则,如果它在客户端被拒绝,您可能希望启用CORS以允许发送其他HTTP谓词.