我正在消隐,需要一个快速的手。谷歌让我失望了。我正在努力用ASP.NET MVC替换WCF / REST入门套件。我希望尽可能轻松地进行转换,因此我尝试创建一个匹配以下URL的路由:
http://localhost/services/MyService.svc/UserInfo
我在Global.asax.cs中创建了路线:
routes.MapRoute(
"MyServiceDefault",
"services/MyService.svc/{action}/{id}",
new {
controller = "MyService",
action = "UserInfo",
id = UrlParameter.Optional
}
);
由于网址.
部分中的MyService.svc
,我很快意识到该请求甚至没有进入我的应用程序。
我缺少什么来强制请求传递到我的应用程序而不是被服务器作为静态资源处理?
更新
我忘了提到我还尝试将以下内容添加到Web.config中无济于事:
<httpRuntime relaxedUrlToFileSystemMapping="true" />
答案 0 :(得分:5)
事实证明,搜索正确的术语组合最终会产生结果。 Phil Haack实际上有关于这个问题的帖子:
Overriding a .svc Request With Routing
事实证明,对于* .svc扩展,只需将<httpRuntime relaxedUrlToFileSystemMapping="true" />
添加到Web.config是不够的。
在其中一个框架Web.config文件中,有一个与* .svc关联的构建提供程序在它到达.NET MVC之前接管请求(并且由于这不是真正的WCF服务而失败)。一旦你知道了,在你的应用程序的Web.config中删除构建提供程序就很容易了:
<system.web>
<compilation debug="true" targetFramework="4.0">
<buildProviders>
<remove extension=".svc"/>
</buildProviders>
...
</system.web>
答案 1 :(得分:0)
查看RouteCollection.RouteExistingFiles属性。默认情况下,此值设置为false。可能是您的服务位于项目的“服务”路径下,这导致了问题。
答案 2 :(得分:0)
这个article告诉您如何在asp.net mvc应用程序中使用不同的扩展,并仍然使它们路由到.NET框架。特别要注意以
开头的部分This is done using a script named registermvc.wsf.