This article is currently in the process of being translated into Chinese (~95% done).
Introduction
在MVC框架中,路由的概念是指映射URL链接,是终端用户将在浏览器中请求的内容。该请求会被发送到其中一个控制器上,随后这个控制器会向浏览器发送回应内容。回应的内容通常是视图,但也可以是一串简单的文本、重定向或是一系列其它的选项。
默认路由
如果你正在从事一项全新项目(从Visual Studio里创建的空模版)的开发,那么你的应用程序暂时还没有任何路由。我们在讨论向项目中添加控制器的那篇文章中提到了一点关于路由的内容,但如果你并没有从头开始学习本系列教程,我们就需要在这里复习一下这些内容。试着打开你的Startup.cs文件,该文件是在你创建项目的时候自动添加的。如果这个文件里面没有关于路由的内容,你就需要手动将其添加进去。最简单的方法是使用分别名为UseRouting() 和 MapDefaultControllerRoute() 的两个帮助方法。其中MapDefaultControllerRoute() 方法向你的项目中添加一个默认(备用)路由,它将会尝试将URL映射到某个控制器的方法上。如果未指定控制器的名称,URL就会被映射到 HomeController 上。
下面是修改后的Startup.cs文件的样子:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if(env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapDefaultControllerRoute();
});
}
多亏有了这些方法,你的应用程序现在支持了基本的路由。下面罗列了一些现在可以正常工作的URL链接,以及这些URL链接所映射到的 控制器/方法 组合。
http://localhost/ -> HomeController.Index()
http://localhost/Home/Index -> HomeController.Index()
http://localhost/Test/ -> HomeController.Test()
http://localhost/Home/Something -> HomeController.Something()
但这并不只影响 HomeController。相反,它还提供了访问控制器中的方法的支持,而无需为其创建特定的路由。因此,如果在一个名为UserController的控制器中有一个叫Details()的方法,那么你就可以通过调用下面的URL链接来访问该方法: /User/Details
换句话说,默认的路由扮演了一种“一把抓”的角色,这是为了让你可以更方便地启动和运行一些简单的页面。当然了,默认路由仅会在你的内容都遵守 /[控制器名]/[方法名] 的模式下才会生效。
一旦你违反了这个规则,例如,你不想让你的控制器名称显示在URL中,那你就需要添加自己的规则。不过别担心,仍然可以依靠默认路由,只需要简单地通过在默认路由被应用之前,添加你自己的规则就行了。我们将在之后讨论这些内容。
总结
路由是映射URL的过程,用户将使用路由,通过将其发送到目标控制器中的方法上来访问你应用程序中特定的页面或功能。而目标控制器会负责创建响应并将其发送给URL链接。多亏有了默认路由,像我们在本文中看到的那样,你可以非常容易地获取最基本的路由功能。不过,为了应对更加复杂的情况,你就需要创建自己的路由。不必担心,我们将在接下来的几篇文章中对其展开详细探讨。