我看过很多关于此的帖子,但我的新WebAPI的DELETE方法根本不起作用,并使用Windows 7 32位IIS 7.5返回404。
我试过
全部无效,全部返回404.如果我将DELETE类型更改为GET,那么服务完全可以运行GET命令。
对此有任何其他想法的人?这让我疯狂。
编辑:
我正在调用这样的DELETE方法(mediator是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>
答案 0 :(得分:1)
解决方案是添加PUT&amp;在正确的applicationHost.config文件中删除动词。
对于IIS:
转到lcation:C:\ Windows \ System32 \ inetsrv \ config 并将applicationHost.config文件编辑为:
<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" />
对于IIS EXPRESS转到: %USERPROFILE%\文件\ iisexpress \设置\ 并在applicationHost.config文件中执行相同的操作。
答案 1 :(得分:0)
您是否在“默认网站”下托管? 如果是,则尝试在不同的端口上单独托管。
我对PUT和DELETE也有同样的问题,并且解决方法也很成功。
答案 2 :(得分:0)
如果您正在使用属性路由,请使用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
{
}