【问题标题】:ASP.NET MVC Delete Action not firingASP.NET MVC 删除操作未触发
【发布时间】: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


【解决方案1】:

这可能是由于this answer to a similar question 中更详细描述的 IIS 配置问题

您可能需要在您的 IIS 配置中启用 DELETE(如果需要,还可以使用 PUT),如下所示:

之前:

<add name="ExtensionlessUrl-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

之后:

<add name="ExtensionlessUrl-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

【讨论】:

  • 是的,就是这样!我添加了 WebDav 解决方法,但没有添加无扩展名 URL。这很痛苦 - 奇怪的是,这似乎适用于没有显式配置更改的 Web API 应用程序。
  • 是的,这很痛苦 - 很高兴你能成功 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-13
相关资源
最近更新 更多