为什么DELETE $ .ajax调用没有被我的控制器捕获?

时间:2016-08-09 09:23:01

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

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

Name

在视图中我正在进行如下的AJAX调用:

AuthenticationType

AJAX链接正在构建为:

DisplayName

[HttpDelete] public ActionResult Delete(int id) { //Deletion logic return Content("OK"); } 操作未从链接获取请求,但如果我通过直接URL访问它实际上有效。此外,如果我删除未指定的$('#delete').click(function () { if (confirm('Delete?')) { var $link = $(this); $.ajax({ url: this.href, type: 'DELETE', success: function (result) { $link.parent().remove(); } }); } return false; }); 行并将控制器操作行@Html.ActionLink("Delete?", "Delete", new { id = Model.Id }, new { id = "delete", @class = "delete-link" }) 替换为Delete,则也可以。

我的观点是type: 'DELETE',方法,我不想将其作为[HttpDelete]请求处理,但我无法弄清楚我是否已经[HttpGet]。我错过了其他的东西。

我很乐意,如果你们中的任何人能够帮助我理解为什么控制器动作DELETE没有捕获来自AJAX Link的请求。

提前致谢。

2 个答案:

答案 0 :(得分:1)

IIS阻止了您的[HttpDelete]方法。

web.config

中添加此内容
<system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
</system.webServer>

答案 1 :(得分:0)

可能是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>

这一改变对我有用。