【问题标题】:ASP.Net MVC Application Root and RoutingASP.Net MVC 应用程序根和路由
【发布时间】:2020-01-19 22:37:20
【问题描述】:

我在 MVC 应用程序中有一个要求,即在所有 URL 中将应用程序根设置为小写,而不将 ID 和查询字符串设置为小写,并且不太确定如何去做。我无法将目录更改为小写,而且我对 IIS 的访问权限有限,因此我希望我能在应​​用程序中找到一种编程方式来执行此操作。

例如,如果我有一个名为 MYAPP 的应用程序的多个版本,其中有 3 个版本(V1、V2、V3),每个版本都在各自的目录中,分别为我们提供 /MYAPP/V1、/MYAPP/V2 和 /MYAPP/V3。

当 MVC 构造 URL 时,它将使用大写的应用程序根,但我想将其设置为小写,其中

@Html.ActionLink("Edit", "Edit", "Products", new { id = "ABC", Module = "CS" }, null)

会导致

<a href="/myapp/v1/Products/Edit/ABC?Module=CS">Edit</a>

而不是

<a href="/MYAPP/V1/Products/Edit/ABC?Module=CS">Edit</a>

我看过使用

routes.LowercaseUrls = true;

在 RouteConfig.cs 但最终不会给我

<a href="/myapp/v1/products/edit/abc?module=cs">Edit</a>

这不是我想要的...任何建议都非常感谢!

【问题讨论】:

    标签: c# iis model-view-controller routing


    【解决方案1】:

    根据你的描述,我建议你可以考虑使用 url rewrite 来帮助你达到这个要求。

    url重写内置ToLower函数,可以帮助你降低url。

    您可以从这个 [url]{https://www.iis.net/downloads/microsoft/url-rewrite} 安装它。

    然后您可以将以下配置设置添加到您的 web.config 中:

                <rule name="TolowerCase" stopProcessing="true">
                    <match url=".*" />
                  <conditions>
                        <add input="{QUERY_STRING}" pattern="(.*)" />
                        <add input="{QUERY_STRING}" pattern="([A-Z]+)" ignoreCase="false" />
    
                  </conditions>
                    <action type="Redirect" url="http://{ToLower:{HTTP_HOST}{PATH_INFO}}?{ToLower:{QUERY_STRING}}" appendQueryString="false" />
                </rule>
    

    结果:

    【讨论】:

      【解决方案2】:

      路由部分是 Products/Edit/ABC?Module=CS。

      1. 一个快速的解决方案是添加一个全局 HTTP 模块,该模块检查 url 的 /MYAPP/V1 部分并将用户重定向到 /myapp/v1。 (如果当前 url 以http://yourdomain/MYAPP/V1 开头的简单比较,请区分大小写)

      2. 您还可以编写自己的扩展来覆盖 ActionLink 方法的行为。

      ActionLink 方法的源代码 - https://github.com/aspnet/AspNetWebStack/blob/749384689e027a2fcd29eb79a9137b94cea611a8/src/System.Web.Mvc/Html/LinkExtensions.cs

      【讨论】:

        猜你喜欢
        • 2011-11-22
        • 1970-01-01
        • 1970-01-01
        • 2017-01-12
        • 1970-01-01
        • 2018-12-14
        • 2014-11-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多