【问题标题】:ASP.NET MVC 2 Issue - Dot in RouteASP.NET MVC 2 问题 - 路由中的点
【发布时间】:2011-04-20 15:05:09
【问题描述】:

我正在消隐,需要一个快速的帮助。谷歌让我失望了。我正在用 ASP.NET MVC 替换 WCF/REST Starter Kit。我想让过渡尽可能轻松,所以我尝试创建一个匹配以下 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 
                }
        );

我很快意识到,由于 URL 的 MyService.svc 部分中的 .,该请求甚至没有发送到我的应用程序。

我缺少什么来强制将请求传递到我的应用程序而不是由服务器作为静态资源处理?

更新

我忘了提到我也尝试将以下内容添加到 Web.config 无济于事:

<httpRuntime relaxedUrlToFileSystemMapping="true" />

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-mvc-2


    【解决方案1】:

    事实证明,搜索正确的术语组合最终会产生结果。 Phil Haack 实际上有一篇关于这个确切问题的帖子:

    Overriding a .svc Request With Routing

    事实证明,对于 *.svc 扩展,仅将 &lt;httpRuntime relaxedUrlToFileSystemMapping="true" /&gt; 添加到 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>
    

    【讨论】:

    • 有趣。我会记下这一点。
    【解决方案2】:

    查看RouteCollection.RouteExistingFiles 属性。默认情况下,这设置为 false。可能是您的服务位于项目中的 Services 路径下,这导致了问题。

    【讨论】:

    • 即使我没有服务文件夹,我还是试了一下。没有运气。我的应用仍然无法处理路线。
    【解决方案3】:

    这个article 告诉您如何将不同的扩展与 asp.net mvc 应用程序一起使用,并且仍然使它们路由到 .NET 框架。特别注意以

    开头的部分
    This is done using a script named registermvc.wsf.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-19
      • 1970-01-01
      • 2013-11-13
      • 2011-11-30
      • 2013-06-07
      相关资源
      最近更新 更多