【问题标题】:ASP.NET MVC Route with values before the controller and no trailing slashASP.NET MVC 路由在控制器之前具有值且没有尾部斜杠
【发布时间】:2023-04-08 15:06:02
【问题描述】:

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

我在 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

奇怪的是,如果我使用默认控制器和操作(即 Home/Index)为该路由调用 Url.Action,它会创建一个不带斜杠的 url,然后它就无法识别。我真的需要它来使用和不使用斜杠。

【问题讨论】:

  • 所有链接都需要斜杠吗?
  • 我不需要 它,但鉴于 Url.Action 方法生成的链接没有斜杠,这将是一个问题
  • 如果将 {action} 参数设为可选会发生什么?
  • @CodeART 给它一个默认值 (Index) 应该已经使它成为“可选”。
  • @HenkMollema 是正确的,该路由中的所有参数都是可选的,但是 2 指定了默认值

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


【解决方案1】:

问题是 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。 org 等扩展

缺点:感觉像个黑客。

   <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"/>

【讨论】:

  • 选项 1 只需添加一点点即可,您需要将 runAllManagedModulesForAllRequests="true" 添加到模块标签中。否则,就是这样。我完全忘记了它会将 .com 解释为扩展名,好电话!
  • 选项 1 没有将 runAllManagedModulesForAllRequests 设置为 true 在 IIS Express 中有效。虽然没有使用 IIS 进行测试。
猜你喜欢
  • 2015-09-06
  • 2012-06-07
  • 1970-01-01
  • 2012-04-05
  • 1970-01-01
  • 1970-01-01
  • 2016-05-19
  • 2018-04-08
  • 2017-05-04
相关资源
最近更新 更多