首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >删除方法.NET WebAPI不工作

删除方法.NET WebAPI不工作
EN

Stack Overflow用户
提问于 2012-09-07 07:53:49
回答 3查看 4.6K关注 0票数 2

我已经看到了很多关于这方面的文章,但是我的新WebAPI的删除方法根本不起作用,而是使用Windows732位、IIS7.5返回404。

我试过了

  • 卸载WebDAV
  • 向ExtensionlessUrlHandler添加PUT、DELETE、选项-集成-4.0处理程序(和32位/64位处理程序)。
  • 允许所有模块运行。

全部无效,全部返回404。如果我将DELETE类型更改为GET,则服务将非常好地运行GET命令。

有人对此有其他想法吗?快把我逼疯了。

编辑:

我像这样调用DELETE方法(中介器是jQuery调用的包装器):

代码语言:javascript
运行
复制
mediator.publish("AjaxCall", {
                url: "/api/files/" + $(a.currentTarget).data("fileid"),
                type: "DELETE",
                }
            });

和WebAPI:

代码语言:javascript
运行
复制
// DELETE api/<controller>/5
// [HttpDelete] - Tried this too
public void Delete(int fileId)
{
     Files.DeleteFile(fileId);
}

以及相关的web.config:

代码语言:javascript
运行
复制
<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>
EN

回答 3

Stack Overflow用户

发布于 2014-04-12 07:17:46

解决方案是在正确的applicationHost.config文件中添加PUT & DELETE谓词。

对于IIS:

转到l阳离子:C:\Windows\System32 32\inetsrv\config,并将applicationHost.config文件编辑为:

代码语言:javascript
运行
复制
 <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文件中执行相同的操作。

票数 2
EN

Stack Overflow用户

发布于 2012-09-07 09:07:39

您是否在“默认网站”下托管?如果是,那么尝试在另一个端口单独托管它。

我在PUT和DELETE上也有同样的问题,解决方法是成功的。

票数 0
EN

Stack Overflow用户

发布于 2015-08-14 05:35:44

如果使用属性路由,请使用DELETE和PUT方法更新AcceptVerbs,如下所示:

代码语言:javascript
运行
复制
[Route("{fileId:int}")]
[AcceptVerbs("DELETE")]
public void Delete(int fileId)
{
   Files.DeleteFile(fileId);
}

另外,如果您将fileId作为参数名编写,那么不要忘记将webAPI路由配置更新为api/fileId/{fileId}。

也可以使用AcceptVerbs属性进行GET和PUT,因为这三者具有相同的URL结构来调用它们的方法。还使用RoutePrefix更新Controller,如下所示:

代码语言:javascript
运行
复制
[RoutePrefix("api/files")]
public class FileController : ApiController
{
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12313978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档