asp.net-mvc - ASP.NET MVC 路由在 Controller 之前带有值并且没有尾部斜杠

标签 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 和操作(即主页/索引)为该路由调用 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/

相关文章:

c# - 使用 ASP.NET MVC4 将 View 中的 DropDownList 绑定(bind)到表中的列

jquery - 在 ASP.NET MVC 2 中实现以下条目表单的想法

c# - 使用 caSTLe-windsor 的 MVC4 中 HttpClient 的生活方式

c# - 实现博客条目链接

c# - 路由错误访问 Action

c# - 从 ASP.NET 上传到 Azure blob 的文件为空

asp.net-mvc - 访问 View 中的域对象

asp.net-mvc - MVC 存储库模式 - 访问其他存储库

c# - 使用 ASP.NET Core 3.1,如何从页面 URL 中剥离 Home Controller ?

c# - 如何从 url 或路由数据中获取 Controller 类型和操作信息?