我已经看到了很多关于这方面的文章,但是我的新WebAPI的删除方法根本不起作用,而是使用Windows732位、IIS7.5返回404。
我试过了
全部无效,全部返回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>
发布于 2014-04-12 07:17:46
解决方案是在正确的applicationHost.config文件中添加PUT & DELETE谓词。
对于IIS:
转到l阳离子:C:\Windows\System32 32\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" />
对于iisexpress,转到:%userprofile%\documents\iisexpress\config\并在applicationHost.config文件中执行相同的操作。
发布于 2012-09-07 09:07:39
您是否在“默认网站”下托管?如果是,那么尝试在另一个端口单独托管它。
我在PUT和DELETE上也有同样的问题,解决方法是成功的。
发布于 2015-08-14 05:35:44
如果使用属性路由,请使用DELETE和PUT方法更新AcceptVerbs,如下所示:
[Route("{fileId:int}")]
[AcceptVerbs("DELETE")]
public void Delete(int fileId)
{
Files.DeleteFile(fileId);
}
另外,如果您将fileId作为参数名编写,那么不要忘记将webAPI路由配置更新为api/fileId/{fileId}。
也可以使用AcceptVerbs属性进行GET和PUT,因为这三者具有相同的URL结构来调用它们的方法。还使用RoutePrefix更新Controller,如下所示:
[RoutePrefix("api/files")]
public class FileController : ApiController
{
}
https://stackoverflow.com/questions/12313978
复制相似问题