ASP.NET MVC HTTP Post/Delete
问题描述:
我有一个ASP.NET MVC应用程序。 我有单一的函数模式,这将被称为与HTTP POST和HTTP DELETE。ASP.NET MVC HTTP Post/Delete
虽然调用Post,但绝不会调用Delete。我确认IIS接受HTTP删除。任何意见?
路线和控制器:
routes.MapHttpRoute(
name: "RegisterCard",
routeTemplate: "{version}/cards/{cardID}",
defaults: new { Controller = "MyController", Action = "
routes.MapHttpRoute(
name: "UnregisterCard",
routeTemplate: "{version}/cards/{cardID}",
defaults: new { Controller = "MyController", Action = "Delete" });
[HttpPost]
public async Task<HttpResponseMessage> Post(string version, string cardID);
{
}
[HttpDelete]
public async Task<HttpResponseMessage> Delete(string version, string cardID);
{
}
答
我不知道该HTTP支持删除。无论如何,只需使用信息进行删除操作即可。只要你不使用GET来执行DELETE动作,你就很好。下面是一些参考...
答
从上面的代码中,我认为有图案{version}/cards/{cardID}
任何URL将被“RegisterCard”路线,不管动词是什么处理(后/删除)。对于“删除”,将选择“注册卡”路线,然后当[HttpPost]
动作选择器进场时,它将导致404错误。如果您遇到404 “删除”,你可能会
ONE 添加约束路线
routes.MapHttpRoute(
name: "RegisterCard",
routeTemplate: "{version}/cards/{cardID}",
defaults: new { Controller = "MyController", Action = "Post"},
constraints: new { httpMethod = new HttpMethodConstraint(new[] { "post" }) }
);
routes.MapHttpRoute(
name: "UnregisterCard",
routeTemplate: "{version}/cards/{cardID}",
defaults: new { Controller = "MyController", Action = "Delete" },
constraints: new { httpMethod = new HttpMethodConstraint(new[] { "delete" }) }
);
或使一个单一的路径与单一ActionName
routes.MapHttpRoute(
name: "Card",
routeTemplate: "{version}/cards/{cardID}",
defaults: new { Controller = "MyController", Action = "HandleCard"}
);
[ActionName("HandleCard")]
[HttpPost]
public async Task<HttpResponseMessage> Post(string version, string cardID);
{
}
[ActionName("HandleCard")]
[HttpDelete]
public async Task<HttpResponseMessage> Delete(string version, string cardID);
{
}
在一起,将它们合并
希望这有助于。
您正在使用哪个浏览器? IE 8和9不会很好地执行AJAX DELETE/PUT。尝试在请求中添加“X-HTTP-Method-Override:Delete”标题并使用POST。这会触发行动吗? – SimonGoldstone
检查这个答案,并通过您的配置文件 http://stackoverflow.com/questions/10906411/asp-net-web-api-put-delete-verbs-not-allowed-iis-8 –