ServiceStack Backbone.Todos不允许删除405

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)

可以?

myt*_*thz 5

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

Backbone.emulateHTTP = true
Run Code Online (Sandbox Code Playgroud)

从他们的网站:

emulateHTTP Backbone.emulateHTTP = true

如果您想使用不支持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谓词.