【问题标题】:Why is DELETE $.ajax call not caught by my controller?为什么我的控制器没有捕获到 DELETE $.ajax 调用?
【发布时间】:2016-08-09 09:23:01
【问题描述】:

我正在尝试使用 AJAX 删除实体。在我的控制器方法中,我有:

[HttpDelete]
public ActionResult Delete(int id)
{
    //Deletion logic
    return Content("OK");
}

在视图中,我正在按如下方式进行 AJAX 调用:

$('#delete').click(function () {
    if (confirm('Delete?')) {
        var $link = $(this);
        $.ajax({
            url: this.href,
            type: 'DELETE',
            success: function (result) {
                $link.parent().remove();
            }
        });
    }
    return false;
});

AJAX 链接正在构建为:

@Html.ActionLink("Delete?", "Delete", new { id = Model.Id }, new { id = "delete", @class = "delete-link" })

Delete 操作没有从链接获取请求,但如果我通过直接 URL 访问它实际上可以工作。此外,如果我删除 type: 'DELETE', 行,使其未指定,并将控制器操作行 [HttpDelete] 替换为 [HttpGet] 它也可以工作。

我的观点是它是一个DELETE 方法,我不想将它作为GET 请求处理,但我不知道我是否遗漏了其他东西。

如果你们中的任何人能帮助我理解为什么控制器操作 Delete(int id) 没有捕获来自 AJAX 链接的请求,我会很高兴。

提前致谢。

【问题讨论】:

  • this.href 的值是多少,应该匹配控制器路由。
  • @kostbone 我刚刚添加了生成 href 的方式。它的值是 localhost/{Controller}/{Action}/X 的绝对 URL,其中 X 是 int。
  • @RoryMcCrossan 我正在使用 MVC5,但我看到 [FromUri] 不可用。
  • 你是对的,我的错,那是来自 WebAPI
  • @CristiPufu 我在应用程序中有许多其他 [HttpDelete] 调用,在没有 Ajax 的情况下也可以正常工作。然而,事实并非如此。所以,对我来说,这不是 IIS。我已经尝试过 Heinz 的建议,但没有奏效。

标签: c# jquery ajax asp.net-mvc-4


【解决方案1】:

IIS 正在阻止您的 [HttpDelete] 方法。

将此添加到您的web.config

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
</system.webServer>

【讨论】:

  • 它就像一个魅力。谢谢。你确实是对的。
【解决方案2】:

可能是 IIS 不允许 PUT 和 DELETE(请参阅 ASP.NET Web API - PUT & DELETE Verbs Not Allowed - IIS 8

Web.config 中检查您的处理程序

<system.webServer>
    <handlers>
           <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
           <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
</system.webServer>

这个改变对我有用。

【讨论】:

  • 它对我不起作用。 404. 到目前为止,我发现它工作的唯一方法是将 Controller 操作装饰为 [HttpGet] 并从 Ajax 调用中删除类型行。
  • handlers 部分在 Web.config 中的外观如何?
  • 您对 IIS 的看法是正确的。我按照@CristiPufu 的建议做了,它奏效了。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-30
  • 1970-01-01
  • 1970-01-01
  • 2019-09-19
  • 2018-06-21
  • 1970-01-01
相关资源
最近更新 更多