为什么在我的运行于IIS 7.5上的RESTful WCF服务中,使用HTTP DELETE方法会返回405错误 - 方法不允许?

37
有谁能解释一下这个问题吗?我今天整天都在寻找和搜索关于如何做到这一点的任何信息,感觉浪费了整个一天。 我创建了一个非常简单的WCF RESTful服务。它基本上是一个概念验证。我有一个简单的数据库,并且我正在尝试让它工作,以便我可以查看、创建、更新和删除项目。目前,我只有查看和更新可用。我将稍后解决创建的问题。现在我无法弄清楚为什么删除不起作用。迄今为止,我找到的几乎所有东西都告诉我需要禁用WebDAV模块。我已经这样做了,然后我让PUT方法可用了。但是我无法让DELETE方法可用。每当我尝试通过我的服务调用DELETE时,我都会收到以下错误消息:

远程服务器返回了一个意外的响应:(405)方法不允许。

似乎我的服务器上某处不允许使用DELETE谓词。但是我却想不出来。我已经检查了处理程序映射,并且处理程序允许.SVC扩展名的所有谓词。我已经禁用了WebDAV。我真的不知道还能从哪里找到答案。我正在使用Windows Server 2008 R2上的IIS 7.5。

(如果需要,我可以提供代码)

谢谢,

Corey

4个回答

81

如果有人遇到相同问题。

这里有另一种方法可以尝试。

在web.config文件中。

<system.webServer>
    <modules>
      <remove name="WebDAVModule" />
    </modules>
    <handlers>
      <remove name="WebDAV" /> 
    </handlers>
</system.webServer>

4
通过 IIS 图形用户界面,进入“模块”和“处理程序映射”以进行删除。谢谢 maxisam! - mcNux
即使WebDAV已配置为允许DELETE,并且已配置为Allow Verb Filtering:false,但这对我仍然有效。 - Adam Anderson
这就是我所需要做的,以避免在我的WCF RESTful服务中PUT和DELETE方法被405错误拒绝。谢谢。 - kurt
1
在添加此代码片段之前,请检查 Web.config 文件中处理程序和模块是否存在重复。 - Iman
1
谢谢,这对我起作用了。 我一直在删除处理程序但没有删除模块,一旦删除模块,删除就像预期的那样发生了。 再次感谢。 - Chris Cavell
1
我花了很多时间都没能解决它,直到我去了IIS GUI并从模块中删除了WebDAV。 - Bashir Momen

30

我刚刚花了很多时间试图弄清楚为什么在使用DELETE动词时一直出现405 Method Not Allowed的错误。我读到的所有内容都说要从IIS卸载WebDAV,但似乎这样做会破坏IIS,所有站点都会给出503错误。我重新安装它,然后在IIS中查找一些设置。

事实证明,WebDAV是问题所在,并且在IIS功能页面上有一个名为"WebDAV Authoring"的节点。单击该节点,然后再单击WebDAV Settings...以获取属性页。在请求过滤行为部分,将Allow Verb Filtering设置为False对我来说似乎有效(结果可能因人而异)。

当我搜索解决方案时,这似乎是一个常见的结果,所以我想添加到建议解决方案列表中。


2

在IIS管理器中打开您网站的Handler Mappings

编辑每个您想要删除的处理程序,点击“请求限制”,选择动词选项卡,然后将DELETE添加到“以下之一”列表中,或者如果适用于您的情况,则允许所有动词。

您可能需要重新启动您的网站和/或重新编译您的代码。


0

我不确定这是否真正回答了我的问题,但它确实解决了问题。我在Visual Studio中启动了一个新项目,并使用我在网上找到的.NET REST服务模板。然后,我将之前尝试过的旧代码转移到了新项目中并在其中使用。它像魔法一样奏效了。现在所有四个动词(GET、PUT、POST和DELETE)都可以正常工作。所以现在它正在运行。

Corey


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接