【发布时间】:2012-09-01 02:14:56
【问题描述】:
我已经看到大量关于此的帖子,但我的新 WebAPI 的 DELETE 方法根本不起作用并返回 404,使用 Windows 7 32 位,IIS 7.5。
我试过了
- 卸载 WebDAV
- 将 PUT、DELETE、OPTIONS 添加到 ExtensionlessUrlHandler-Integrated-4.0 处理程序(和 32 位/64 位处理程序)。
- 允许所有模块运行。
一切都无济于事,全部返回 404。如果我将 DELETE 类型更改为 GET,则服务运行 GET 命令完全正常。
有人对此有任何其他想法吗?这让我疯狂。
编辑:
我正在像这样调用 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>
【问题讨论】:
-
您如何调用
DELETE方法 - 此设置的客户端是什么? -
(我正在考虑的问题是该请求是否被视为跨域请求 - 您是否尝试过实现
OPTIONS并查看是否首先受到攻击?) -
OPTIONS 提出了“不允许的方法”——同时使用 JSON 和 JSONP 作为数据类型。删除的 JSON/JSONP/XML 仍然是 404。
-
您的应用程序池是否在“集成”托管管道模式下运行? (您的前置条件是 preCondition="integratedMode")... 可能值得在命令提示符下使用厚颜无耻的 aspnet_regiis -ir 以确保正确设置 IIS。
-
显然我的系统上没有任何 aspnet_regiis.exe,即使在修复 .NET 4.5 时也是如此......故事还在继续......
标签: c# .net asp.net-web-api wcf-web-api