我有一个MVC应用程序中的要求,在所有URL中将应用程序根目录设置为小写,而不必将ID和querystring设置为小写,并且不确定如何操作。 我无法将目录更改为小写,并且对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>

这不是我想要的...任何建议,我们将不胜感激!

#1楼 票数:0

路径部分是“产品/编辑/ ABC?模块= CS”。

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

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

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

#2楼 票数:0

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

网址重写具有内置的ToLower功能,可以帮助您降低网址。

您可以从此[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>

结果:

在此处输入图片说明

  ask by Ben translate from so

未解决问题?本站智能推荐:

3回复

C#ASP.NET MVC 1.0路由

在我的网络应用中。 我想设置一条这样的路线: 如您所见,我有两种文件:一般文件和质量文件。 在global.asax文件中进行设置的最佳方法是什么? 我尝试了以下方法,但无法正常工作: 编辑 我现在可以正常使用,但是当我在asax文件中更改action =“”时,它将
2回复

MVC Preview 5和IIS 5.1的路由问题

好的,所以我花了几个小时试图解决这个问题,到目前为止没有任何线索,继续得到相同的404错误。 会发生什么是网站选择Default.aspx页面并按照它应该显示它。 但是主页有一个可点击的图像,它可以路由到另一个视图页面。 图像代码如下: 单击时,我收到404错误。 我的控制器
1回复

ASP.NET MVC AJAX 调用应用程序/控制器/操作?

Ajax 调用在 Visual Studio 2019 调试中工作正常,但在部署 Fiddler 时显示对控制器调用的调用遵循“应用程序/控制器/操作”路由,但对控制器的 Ajax 调用未添加 Web 应用程序名称,因此控制器操作没有找到。 是否有关于将 Route Debugger 用于远程网
1回复

在IIS上部署的MVC应用程序中进行路由

我添加了以下代码 在RouteConfig类中,我添加了以下内容 我希望我的http://mymachine/imp可以工作。 我究竟做错了什么? 我也必须在IIS中进行一些设置吗?
3回复

我在 ASP.NET MVC 应用程序中找不到从 URL 中删除斜杠的位置和应用程序

我想从 URL 中删除多个斜杠,以便如果有人搜索: site.com//Home//Index// 永久重定向到 site.com/Home/Index/ 或至少给出 404。 我尝试从 IIS 创建一些重写规则甚至阻止规则:规则,一段时间后我发现问题出在请求接触 IIS 之前,因为在 IIS
1回复

ASP.NET MVC5拒绝映射与物理路径匹配的路由

当我使用IIS Express调试/运行并浏览到http://localhost:1234/People ,IIS Express尝试浏览People目录而不是执行People路由,并且出现403.14 HTTP错误。 因此,我在Web.config中禁用了StaticFile处理程序并进行了
2回复

C#MVC 5路由

希望您能对我有所帮助:)我正在尝试在.net mvc应用程序中执行注销功能,但是我制作的链接始终无法到达正确的路径。 这是我的代码: 当我单击此链接时,我的浏览器中有以下网址: 我的错误在哪里?
2回复

MVC2路由+ Ajax ==?

我正在整理一个几乎完成的mvc2应用程序,我有一些ajax请求最终看起来像 www.host.com/site/controller/action?UserName=asdf&UserPassword=asdfasdf&Email=asd%40df.com&Phon