ASP.NET MVC Route在控制器之前具有值,没有尾部斜杠

时间:2013-11-14 07:37:27

标签: asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing

这可能是一个简单的问题,但我无法让它发挥作用。

我在RouteConfig中指定了这条路线

routes.MapRoute(
    name: "DefaultSiteRoute",
    url: "{accountid}/{hostname}/{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional, accountid = UrlParameter.Optional, hostname = UrlParameter.Optional  }
);

它适用于这样的网址

  

/123456/www.test.com /

或者

  

/123456/www.test.com/Controller/Action

但它无法应对这个

  

/123456/www.test.com

我得到了一个IIS 404

更奇怪的是,如果我使用默认的Controller和Action(即Home / Index)为该路由调用Url.Action,它会创建一个没有尾部斜杠的URL,然后它无法识别。我真的需要它使用和不使用尾部斜杠。

1 个答案:

答案 0 :(得分:6)

问题是ASP.net 4.0不会将以扩展名结尾的URL路由到MVC。他们这样做是为了加快对静态文件的请求。 See this link

你能做什么:

1)配置UrlRoutingModule以路由所有托管和非托管请求(默认只是路由托管请求)。

缺点:可能对性能不利。

<system.webServer>
    <modules>
     <remove name ="UrlRoutingModule-4.0"/>
      <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="runtimeVersionv4.0" />
    </modules>
<system.webServer>

2)配置处理.com,.net。组织等扩展

缺点:感觉像是黑客。

   <system.webServer>
       <handlers>
          <add name="UrlRoutingHandler"
           type="System.Web.Routing.UrlRoutingHandler, 
                 System.Web, Version=4.0.0.0, 
                 Culture=neutral, 
                 PublicKeyToken=b03f5f7f11d50a3a"
                 path="*.com"
                 verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS"/>