繁体   English   中英

ASP.Net MVC 应用程序根和路由

[英]ASP.Net MVC Application Root and Routing

我在 MVC 应用程序中要求在所有 URL 中将应用程序根设置为小写,而不将 ID 和查询字符串设置为小写,并且不太确定如何 go 关于它。 我无法将目录更改为小写,并且我对 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>

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

路线部分是 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.ZC6E190B284633C48E39E55049/DAQE39E55049/DA

根据您的描述,我建议您可以考虑使用 url 重写来帮助您实现此要求。

url 重写内置 ToLower function 可以帮助您降低 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>

结果:

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM