IIS中托管的WCF REST服务不支持PUT和DELETE

时间:2010-08-21 01:05:45

标签: wcf rest put http-delete

我使用Microsoft的WCF REST服务模板40在.NET 4中创建了一个WCF REST(又名WebHttp)服务。我在IIS 6中托管该服务。

服务模板使用Global.asax中的RouteTable作为创建“干净”URL的方法,其中不包含“.svc”。例如:

http:// localhost / flights / 878

GET和POST可以正常使用此URL,但PUT和DELETE会导致HTTP 501,“未实现”。

如果我创建一个简单的.svc文件:

<%@ ServiceHost Language="C#" Debug="true" Service="MyProject.FlightsService"%>

然后我可以对这个URL使用PUT和DELETE:

http:// localhost / flightsservice.svc / 878

有没有人知道是否可以让PUT和DELETE对抗上面的“干净”网址?似乎没有办法配置IIS来允许这个,因为没有文件扩展名来配置设置,我不想全局允许PUT和DELETE。

2 个答案:

答案 0 :(得分:4)

我有一段时间没有使用IIS6(我没有安装它,所以我要在这里关闭内存),但我必须实现与IIS6类似的东西,以便在IIS6中路由无扩展的URL。 / p>

您可以通过黑客入侵IIS管理器逐个文件夹地启用通配符脚本映射。这个blog post就是我所遵循的,它运作得非常好(这个link提供了更多的背景)。它实际上是管理器中的一个错误,而不是IIS本身(至少这是我告诉自己的)。

您可以在网站的子文件夹中引用您的服务(例如http://localhost/services/flight/878)吗?如果是这样,如果您实现上面的IIS管理器,我认为您可以为该目录启用所有HTTP谓词。再一次,我要关闭内存(我们只实现了GET和POST,所以我没有处理PUT和DELETE),所以我希望我能做到这一点。

如果您需要更多信息或我的记忆力正在下滑,请告诉我。 :)我希望这有帮助!

答案 1 :(得分:2)

如果您的Web应用程序已部署到多个开发/生产环境,那么最好的方法似乎是在web.config级别禁用WebDAV。为此,请删除WebDAVModule和WebDAV处理程序,如下例所示:

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