【发布时间】:2015-06-10 16:13:24
【问题描述】:
我有一个使用属性路由的 ASP.NET MVC 5 控制器,该控制器似乎不适用于 DELETE 操作。
[Route("deletealbum/{id}")]
[AcceptVerbs(HttpVerbs.Delete)]
public ActionResult DeleteAlbum(int id)
{
// rest of the code omitted here
return Json(true, JsonRequestBehavior.AllowGet);
}
我明确将路由名称更改为 deletename 以排除其他路由重载冲突。
上述操作未触发 - 我从 IIS 中找不到 404。但是,如果我将上述操作切换为HttpVerbs.Get,则发现路由没有问题。
很长一段时间以来第一次使用 MVC 而不是 Web API 构建 API,我无法弄清楚为什么路由没有触发 - 几乎看起来任何 DELETE 操作都被阻止了。我在不同的控制器中看到相同的行为 - GET 工作正常,但 DELETE 操作返回 404。是否需要翻转某些配置设置以启用其他动词?
【问题讨论】:
-
删除操作发生在什么操作结果上?我问是因为在标准 mvc 应用程序(不是 api ,而不是 json )中,HttpGet 必须与路由属性中的 HttpPost 具有相同的名称。
-
@gerdi - 不确定我是否理解你的问题。路线是独一无二的(虽然我真的希望与 GET/POST/PUT 相同 - 即专辑/{id}),但为了确保不存在路线解析问题,我使用了唯一名称。我不知道基于 MVC 中的动词的属性路由中的名称有任何限制。
-
WebDAV 可能是问题,值得检查:stackoverflow.com/questions/10906411/…
-
从这篇文章衍生的博文:weblog.west-wind.com/posts/2015/Apr/09/…
标签: asp.net-mvc asp.net-mvc-routing