【问题标题】:Remove Trailing Slash in ASP.NET MVC 4 Route to Application Root删除 ASP.NET MVC 4 路由中的尾部斜杠到应用程序根目录
【发布时间】:2012-07-04 17:47:55
【问题描述】:

在我的 ASP.NET MVC 4 应用程序的 RouteConfig 文件中,我注册了以下默认路由:

routes.MapRoute("Default", "{controller}/{action}/{id}",
    new { controller = "home", action = "index", id = UrlParameter.Optional });

现在,在我的 Razor 视图中,我想像这样生成一个指向我的应用程序根目录的 URL:

<a href="@Url.Action("index", "home")">Home</a>

生成的 URL 包含尾部斜杠;因此,单击该链接会打开页面 localhost/IISApplicationName/。但是,我希望 URL 不包含尾部斜杠,以便 URL 为 localhost/IISApplicationName。为其他操作生成路由,例如 /Account/Login,不会创建带有斜杠的 URL——它只是关于链接到我的应用程序根目录的路由。

有什么方法可以防止 ASP.NET MVC 路由在上述路由中附加斜杠吗?

(我知道我可以从包含斜杠的 URL 重定向到没有斜杠的 URL,但我宁愿让路由首先生成正确的路由 URL。)

【问题讨论】:

  • 我无法复制您的问题,我使用Default route,它会转到没有/ 的网址
  • 仅供参考,斜杠有什么问题?
  • @alexanderb 1) 尽管 URL 略有不同,但两个链接最终都显示相同的页面。不好...... 2)它很丑;-)。
  • 我认为这可能有用:net.tutsplus.com/tutorials/…

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


【解决方案1】:

我推荐 URL Rwrite Outbounds 规则。

Creating Outbound Rules for URL Rewrite Module : URL Rewrite Module 2 : URL Rewrite Module : The Official Microsoft IIS Site

示例配置:

    <rewrite>
        <outboundRules>
            <rule name="RewriteSlash">
                <match filterByTags="A" pattern="^/IISApplicationName/$" />
                <action type="Rewrite" value="/IISApplicationName" />
            </rule>
        </outboundRules>
    </rewrite>

【讨论】:

    【解决方案2】:

    有什么方法可以防止 ASP.NET MVC 路由附加 上述路线的尾随斜杠?

    当相对路径为空时,你应该传递一个斜杠。如果你以某种方式生成带有 href localhost/IISApplicationName 的链接,浏览器仍然会在末尾附加一个“/”(你可以很容易地验证这一点在 firebug 中,只需在浏览器地址栏中输入 http://stackoverflow.com 并检查请求选项卡即可看到尾随的“/”)。

    这是因为根据 HTTP/1.1,

    绝对路径不能为空;如果原件中没有 URI,它必须以“/”(服务器根目录)的形式给出。

    http://www.faqs.org/rfcs/rfc2616.html#ixzz0kGcaRbqU(第 5.1.2 节)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-09-28
      • 1970-01-01
      • 2019-05-07
      • 1970-01-01
      • 2013-04-30
      • 2016-05-19
      • 1970-01-01
      相关资源
      最近更新 更多