使用以下路线:
routes.MapHttpRoute(
name: "Set",
routeTemplate: "api/set/{id}",
defaults: new { controller = "Set", id = RouteParameter.Optional }
);
映射到以下方法:
[HttpDelete]
[AcceptVerbs("DELETE")]
public HttpResponseMessage DeleteSet(int id)
{
//stuff
}
我可以通过这个调用删除集合:
DELETE api/set/1
但是,如果我删除上述路由以支持属性路由:
[HttpDelete("api/set/{id}")]
[AcceptVerbs("DELETE")]
public HttpResponseMessage DeleteSet(int id)
{
//stuff
}
并添加到我的配置中:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
var cors = new EnableCorsAttribute("http://localhost:11089", "*", "*");
config.MapHttpAttributeRoutes(); // new, working with stuff other than delete
config.EnableCors(cors); // already working, not new
}
}
由于 CORS 问题,相同的请求中断:
在图像中,您会看到一个查询参数,但这适用于仅具有 id 的简单 DELETE 查询。到底他妈发生了什么?我们在属性映射上投入了大量时间,但因为 DELETE 不起作用,所以必须回滚所有内容会很臭。
这是另一个使用简单 id 中断的 DELETE 实例:
以上来自这个请求:
var options = {
url: apiEndpoint + 'card/' + id,
type: 'DELETE',
dataType: 'json',
xhrFields: {
withCredentials: true
}
};
return $.ajax(options)
更新
如果我们在所有删除方法中加上“ [AcceptVerbs("OPTIONS")]
”,那么它就可以工作。似乎不优雅,如果有人有权威的答案,我想保持开放状态。