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

Mik*_*rne 8 rest wcf put http-delete

我使用Microsoft的WCF REST服务模板40在.NET 4中创建了一个WCF REST(aka 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"%>
Run Code Online (Sandbox Code Playgroud)

那么我可以对这个URL使用PUT和DELETE:

http:// localhost/flightsservice.svc/878

有谁知道是否有可能让PUT和DELETE对抗上面的"干净"URL?似乎没有办法配置IIS来允许这个,因为没有文件扩展名来配置设置,我不想全局允许PUT和DELETE.

Dav*_*ter 4

我已经有一段时间没有使用 IIS6了(而且我没有安装它,所以我在这里失去了记忆),但我必须实现与 IIS6 类似的东西,以便在 IIS6 中路由无扩展 URL。

您可以通过破解 IIS 管理器在逐个文件夹的基础上启用通配符脚本映射。这篇博文是我所关注的,并且效果非常好(并且此链接提供了更多背景知识)。这实际上是管理器中的一个错误,而不是 IIS 本身的错误(至少我是这么告诉自己的)。

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

如果您需要更多信息或者我的记忆力是否衰退,请告诉我。:) 我希望这有帮助!