在 ASP.NET Core 中更改控制器路由

Posted

技术标签:

【中文标题】在 ASP.NET Core 中更改控制器路由【英文标题】:Change Controller Route in ASP.NET Core 【发布时间】:2018-01-30 01:37:02 【问题描述】:

所以我有一个HomeController,要与Actions 一起访问它,我必须输入url.com/home/action

是否可以将其更改为 url.com/anothernamethatpointstohomeactually/action 之类的其他名称?

【问题讨论】:

【参考方案1】:

我建议你使用属性路由,当然这取决于你的场景。

[Route("prefix")]
public class Home : Controller 

    [HttpGet("name")]
    public IActionResult Index() 
    


这将在url.com/prefix/name 找到

属性路由有很多选项,一些示例:

[Route("[controller]")] // there are placeholders for common patterns 
                           as [area], [controller], [action], etc.

[HttpGet("")] // empty is valid. url.com/prefix

[Route("")] // empty is valid. url.com/

[HttpGet("/otherprefix/name")] // starting with / won't use the route prefix

[HttpGet("name/id")]
public IActionResult Index(int id) ... // id will bind from route param.

[HttpGet("id:int:required")] // you can add some simple matching rules too.

查看Attribute Routing official docs

【讨论】:

【参考方案2】:

使用控制器顶部的 Route 属性将允许您在整个控制器上定义路由。 [Route("anothernamethatpointstohomeactually")]

您可以阅读更多here。

【讨论】:

【参考方案3】:

您可以在 Startup.Configure 块内的 Startup.Configure 方法中添加新的 Routes

routes.MapRoute(
    name: "SomeDescriptiveName",                      
    template: "AnotherNameThatPointsToHome/action=Index/id?",
    defaults: new  controller = "Home" 
);

代码与 ASP.NET MVC 非常相似。

有关详细信息,请参阅Routing in ASP.NET Core。

下面是 ASP.NET MVC(不是 ASP.NET Core MVC)

您还可以通过routes.MapRoute 在您的RouteConfig 中添加新的Route

routes.MapRoute(
    name: "SomeDescriptiveName",
    url: "AnotherNameThatPointsToHome/action/id",
    defaults: new  controller = "Home", action = "Index", id = UrlParameter.Optional 
);

确保在定义 Default 路由之前插入代码。

欲了解更多信息,请访问docs。

【讨论】:

在 .net 核心 3.1 中。你需要使用 app.useEndPoints();【参考方案4】:

您可以通过修改路由配置来更改您的网址。 它有点像 htaccess,但不是真的。 https://docs.microsoft.com/en-us/aspnet/mvc/overview/older-versions-1/controllers-and-routing/creating-custom-routes-cs

另一种解决方案是创建一个页面并进行服务器重定向。

Server.Transfer

【讨论】:

Server.Transfer 在 asp.net core mvc 中不存在。 您的链接似乎已损坏。

以上是关于在 ASP.NET Core 中更改控制器路由的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core 3.0 控制器路由不起作用

ASP.NET Core MVC 之控制器(Controller)

在控制器中更改 ASP.NET Core 2.0 标识连接字符串

ASP.NET Core使用功能开关控制路由访问(续)

ASP.NET Core使用功能开关控制路由访问

ASP.NET Core使用功能开关控制路由访问(续)