这可能是一个简单的问题,但我无法让它发挥作用。
我在我的 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 和操作(即主页/索引)为该路由调用
Url.Action
,它会创建一个没有尾部斜杠的 url,然后它无法识别。我真的需要它在有和没有尾部斜杠的情况下工作。
最佳答案
问题是 ASP.net 4.0 不会路由以 MVC 扩展结尾的 URL。他们这样做是为了加快对静态文件的请求。 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"/>
关于asp.net-mvc - ASP.NET MVC 路由在 Controller 之前带有值并且没有尾部斜杠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19972092/