[英]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。
一个快速的解决方案是添加一个全局 HTTP 模块,该模块检查 url 的 /MYAPP/V1 部分并将用户重定向到 /myapp/v1。 (如果当前 url 以http://yourdomain/MYAPP/V1开头的简单比较,请使其区分大小写)
您还可以编写自己的扩展来覆盖 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.