如何在 ASP.NET MVC 5 中设置指向同一控制器的 2 个路由

jst*_*rdo 9 c# url-routing asp.net-mvc-5.2

我有一个 ASP.NET MVC 5 网站,其中有一个控制器 MyFirstController

这样,我可以使用 加载索引视图https://example.server.com/MyFirst

另一方面,我有另一个视图以这种方式呈现链接(HTML A 标记的 HREF 属性):

Url.Action("Index", "MyFirst")
Run Code Online (Sandbox Code Playgroud)

该 URL 呈现会导致生成链接:

https://example.server.com/MyFirst 
Run Code Online (Sandbox Code Playgroud)

到目前为止,一切都很好。现在,我需要一条像这样的路线

https://example.server.com/MySecond
Run Code Online (Sandbox Code Playgroud)

Index该 URL 应加载控制器的相同视图MyFirst,而不创建名为 的新控制器MySecondController。这就像有一个MyFirst名为 的控制器别名MySecond

在文件中RouteConfig.cs我添加了这个:

routes.MapRoute(name: "MySecond",
                url: "MySecond/{action}/{id}",
                defaults: new { controller = "MyFirst", action = "Index", id = UrlParameter.Optional }
               );
Run Code Online (Sandbox Code Playgroud)

我对这段代码的问题是我在另一个视图中有这个渲染代码:

@if (somecondition)
{
    ... Url.Action("Index", "MyFirst") ...
}
else
{
    ... Url.Action("Index", "MySecond") ...
}
Run Code Online (Sandbox Code Playgroud)

我需要如果somecondition为 true,则呈现的 URL 为https://example.server.com/MyFirst,如果为 false,则呈现的 URL 为https://example.server.com/MySecond

我遇到的问题是两者都被渲染为https://example.server.com/MySecond.

我怎样才能完成这个任务?

pfx*_*pfx 4

Url.Action不要使用,而是使用use Url.Route,因为它允许显式传递用于渲染 url 的路由名称。

要呈现/MySecondurl,请传递路由名称MySecond

@Url.RouteUrl("MySecond")
Run Code Online (Sandbox Code Playgroud)

执行相同的操作来呈现/MyFirsturl,但由于它没有显式的路由名称,因此您必须传递默认路由的名称和控制器的名称MyFirst

@Url.RouteUrl("Default", new { Controller = "MyFirst" })
Run Code Online (Sandbox Code Playgroud)

您可以省略操作的名称Index,因为它已被设置为默认名称。