DELETE方法.NET WebAPI不起作用

我已经看过很多关于这个的post,但我的新WebAPI的DELETE方法根本不起作用,并返回404,使用Windows 7 32位,IIS 7.5。

我试过了

  • 卸载WebDAV
  • 将PUT,DELETE,OPTIONS添加到ExtensionlessUrlHandler-Integrated-4.0处理程序(以及32位/ 64位处理程序)。
  • 允许所有模块运行。

所有都没有用,所有返回404.如果我将DELETE类型更改为GET,那么服务完全运行GET命令。

有没有任何其他想法的人? 这让我疯狂。

编辑:

我正在调用DELETE方法(mediator是jQuery调用的包装器):

mediator.publish("AjaxCall", { url: "/api/files/" + $(a.currentTarget).data("fileid"), type: "DELETE", } }); 

和WebAPI:

 // DELETE api//5 // [HttpDelete] - Tried this too public void Delete(int fileId) { Files.DeleteFile(fileId); } 

和相关的web.config:

            

解决方案是在正确的applicationHost.config文件中添加PUT和DELETE谓词。

对于IIS:

转到lcation:C:\ Windows \ System32 \ inetsrv \ config并将applicationHost.config文件编辑为:

     

对于IIS EXPRESS转到:%userprofile%\ documents \ iisexpress \ config \并在applicationHost.config文件中执行相同操作。

你在“默认网站”下托管? 如果是,则尝试在不同的端口上单独托管。

我有与PUT和DELETE相同的问题,并且解决方法是成功的。

如果您正在使用属性路由, 使用DELETE和PUT方法更新AcceptVerbs ,如下所示:

 [Route("{fileId:int}")] [AcceptVerbs("DELETE")] public void Delete(int fileId) { Files.DeleteFile(fileId); } 

另外,如果您将fileId作为参数名称编写,那么不要忘记将webAPI路由配置更新为api / files / {fileId}

并且还为GET和PUT使用AcceptVerbs属性,因为这三个具有相同的URL结构来调用它们的方法。 还使用RoutePrefix更新Controller,如下所示:

 [RoutePrefix("api/files")] public class FileController : ApiController { }