原文:Dynamic controller routing in ASP.NET Core 3.0
作者:Filip W
译文:https://www.cnblogs.com/lwqlun/p/11461657.html
译者:Lamond Lu
译者注
今天在网上看到了这篇关于ASP.NET Core动态路由的文章,感觉蛮有意思的,给大家翻译一下,虽然文中的例子不一定会在日常编码中出现,但是也给我们提供了一定的思路。
前言
相对于ASP.NET MVC以及ASP.NET Core MVC中的旧版本路由特性, 在ASP.NET Core 3.0中新增了一个不错的扩展点,即程序获取到路由后,可以将其动态指向一个给定的controller/action.
这个功能有非常多的使用场景。如果你正在使用从ASP.NET Core 3.0 Preview 7及更高版本,你就可以在ASP.NET Core 3.0中使用它了。
PS: 官方没有在Release Notes中提到这一点。
下面就让我们一起来看一看ASP.NET Core 3.0中的动态路由。
背景
当我们使用MVC路由的时候,最典型的用法是,我们使用路由特性(Route Attributes)来定义路由信息。使用这种方法,我们需要要为每个路由进行显式的声明。
public class HomeController : Controller
{
[Route("")]
[Route("Home")]
[Route("Home/Index")]
public IActionResult Index()
{
return View();
}
}
相对的,你可以使用中心化的路由模型,使用这种方式,你就不需要显式的声明每一个路由 - 这些路由会自动被所有发现的控制器的自动识别。 然而,这样做的前提是,所有的控制器首先必须存在。
以下是ASP.NET Core 3.0中使用新语法Endpoint Routing的实现方式。
app.UseEndpoints(
endpoints =>
{
endpoints.MapControllerRoute("default",
"{controller=Home}/{action=Index}/{id?}