繁体   English   中英

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

ASP.Net MVC Application Root and Routing

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我在 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>

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

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.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>

结果:

在此处输入图像描述

1 将ASP.NET MVC根应用程序路由到MVC虚拟目录

我将MVC应用程序设置为根应用程序。 在该根目录下,我有一个虚拟目录,它也是一个MVC应用程序。 我需要从根应用程序导航到虚拟目录。 第一个障碍是找到存在于另一个命名空间中的控制器,而我能够做到这一点如下。 它可以正确找到控制器,但是仍然尝试在根应用程序而不是虚拟目录中查找视图。 ...

2 ASP.NET MVC应用程序中的角路由

我试图在我的角度控制器中读取查询参数,所以我设置了确认的路由配置emailcontroller.js ConfirmedEmail.cshtml 我的根目录是http:// localhost:25715 / confirmedemail / 111/222 ,其中111是use ...

3 ASP.NET MVC路由根级别视图

我觉得这很容易,但我完全不知所措。 我希望一个控制器的视图位于应用程序的根级别,而不是在该控制器的子目录中,但我无法弄明白。 我想要这两个网址: / Info - 这应该在控制器“Home”上操作“Info” / Admin / - 这应该是控制器“Admin”上的操作“ ...

4 ASP.NET MVC路由在根目录下给出目录列表

我有以下路线: 第一条路线完全按照此问题进行请求。 第二个通常路由一堆静态内容页面。 例如localhost / Help,localhost / Contact等,所有都路由到MainController,该MainController仅根据页面名称返回视图: 问题是,至少 ...

5 ASP.Net MVC路由:如何抓住网站的根源?

在我的global.asax中,我有3条路线: 问题是,我可以让他们分开工作(仅在家中或只是MemberHome),但是当它们都被激活时,它的Home或MemberHome都无法找到404资源。 知道如何进行这项工作吗? ...

8 ASP.NET MVC应用程序应用程序根目录问题

我有一个ASP MVC应用程序,已在托管服务(discountasp.net)上将其部署到作为根应用程序子文件夹的应用程序文件夹中。 即: 根目录和应用程序都设置为IIS中的应用程序文件夹。 当我点击默认页面时,出现错误“视图”或找不到其主视图。已搜索以下位置”。 当我将其 ...

10 ASp.Net MVC路由

我正在使用MVC 2.0创建我的应用程序,我的问题与路由有关。 实际上,在我的应用程序中,每个用户都需要单独的子域,例如www.example.com/user1/,www.example.com / user2 / ...等。默认域是www.example.com。可能在MVC中进行路由。 ...

暂无
暂无

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

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