我已经看过大量关于此问题的帖子,但我的新 WebAPI 的 DELETE 方法根本不起作用,并且使用 Windows 7 32 位、IIS 7.5 返回 404。
我试过了
- 卸载 WebDAV
- 将 PUT、DELETE、OPTIONS 添加到 ExtensionlessUrlHandler-Integrated-4.0 处理程序(和 32 位/64 位处理程序)。
- 允许所有模块运行。
一切都无济于事,全部返回 404。如果我将 DELETE 类型更改为 GET,那么该服务将完美运行 GET 命令。
大家对此还有其他想法吗?这让我疯狂。
EDIT:
我像这样调用 DELETE 方法(中介器是 jQuery 调用的包装器):
mediator.publish("AjaxCall", {
url: "/api/files/" + $(a.currentTarget).data("fileid"),
type: "DELETE",
}
});
和WebAPI:
// DELETE api/<controller>/5
// [HttpDelete] - Tried this too
public void Delete(int fileId)
{
Files.DeleteFile(fileId);
}
以及相关的web.config:
<handlers>
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule" />
</modules>