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 { }