什么是路由?解释它在ASP.NET Core中是如何工作的
在Web应用程序框架的上下文中,路由将传入的HTTP请求与可执行代码匹配。可执行代码充当处理请求并返回响应的端点。
ASP.NET Core在应用程序启动时定义和配置端点。路由还负责从请求中提取值,构建合适的对象,并将它们传递给处理请求的方法。
从一开始,路由就是ASP.NET Core的重要组成部分。但是,ASP.NET Core 3.0引入了一个名为端点路由的新路由系统。它将路由与MVC框架分离,并使其成为ASP.NET Core更基本的功能。您仍然可以使用它来配置MVC路由,但此外,新的路由系统允许您使用以下方法配置路由:
控制器
Razor Pages
SignalR
gRPC服务
委托和Lambda表达式
您还可以使用ASP.NET Core中的路由将具有多个URL的请求映射到相同的控制器或Razor Pages。
当您使用模板生成新的ASP.NET Core应用程序时,它会在生成的代码中包含路由。您在中间件管道中注册路由,该管道在Startup类的Configure()方法中定义。在下面的示例中,粗体代码配置了应用程序的路由。
public void Configure(IApplicationBuilder app, IWebHostEnvironment env){ if (env.IsDevelopment()){ app.UseDeveloperExceptionPage(); }else{ app.UseExceptionHandler("/Error"); // The default HSTS value is 30 days. You may want to change this for production app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints =>{ endpoints.MapRazorPages(); }); }
**UseRouting()** 方法将路由匹配添加到中间件管道,该管道在检查已定义的端点后选择与请求最匹配的端点。
**UseEndPoints()** 添加端点执行到中间件管道。
您可以通过两种不同的方式配置路由
基于约定的路由
基于属性的路由
您选择哪种路由策略取决于您正在构建的Web应用程序的类型,即MVC或Razor Pages,以及您是构建API还是具有用户界面的Web应用程序。
基于约定的路由适用于您的应用程序的全局范围,即所有MVC控制器或Razor Pages都可以使用它。您可以使用定义良好的ASP.NET Core约定定义您的控制器、方法或Razor Pages,以将请求映射到端点。尽管这种方法在大多数情况下都能很好地工作,但它使得创建自定义路由和端点变得具有挑战性。
使用基于属性的路由,您可以使用C#属性(例如控制器上的[Route])将给定的URL映射到特定的端点。基于属性的路由在为路由命名和将请求与端点匹配方面提供了更大的灵活性。您可以明确定义每个端点的URL应该是什么。尽管它可能比较冗长,但额外的灵活性可以证明是有用的。