我有一个 ASP.NET MVC 应用程序。 我有单个函数模式,将通过 HTTP POST 和 HTTP DELETE 调用。
尽管调用了 Post,但从未调用过删除。我确认 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);
{
}
从上面的代码中,我认为任何具有模式
{version}/cards/{cardID}
的 url 都将由“RegisterCard”路由处理,无论动词是什么(发布/删除)。对于“删除”,将选择“注册卡”路由,然后当[HttpPost]
操作选择器发挥作用时,将导致404错误。如果您遇到“删除”404,您可能会
一个 为路线添加约束
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" }) }
);
OR 创建一条将它们与单个
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);
{
}
希望这有帮助。
我不确定HTTP是否支持删除。无论如何,只需使用 post 进行删除操作即可。只要您不使用 GET 进行 DELETE 操作,就可以了。这是一些参考...