我使用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。
答案 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>