C# ASP.NET Core 中的路由是什么?

C# ASP.NET Core 中的路由是什么?

1. 什么是路由?

在 C# ASP.NET Core 中,路由指的是一种机制,可以将传入的 URL 映射到处理该 URL 的代码中。ASP.NET Core 路由由 Route 类和 RouteCollection 类组成,它们允许您定义应用程序中的 URL 结构,并映射到代码中。

1.1 Route 类

Route 类表示一个 URL 的模板,它定义了一种 URL 结构和一组处理该 URL 的方法。可能的 URL 组件包括主机名、端口号、路径、查询字符串、片段等。

下面是 Route 类的定义:

public class Route

{

public string Template { get; set; }

public RouteValueDictionary Defaults { get; }

public int? Order { get; set; }

public IDictionary Constraints { get; }

public IDictionary DataTokens { get; }

}

1.2 RouteCollection 类

RouteCollection 类是 Route 类的集合,它表示应用程序中的所有路由。使用 RouteCollection,您可以定义应用程序的 URL 结构,并将 URL 映射到处理它们的代码。

下面是 RouteCollection 类的定义:

public class RouteCollection : ICollection, IEnumerable, IEnumerable

{

public void Add(Route item);

public Route MapRoute(string name, string template);

public Route MapRoute(string name, string template, object defaults);

public Route MapRoute(string name, string template, object defaults, object constraints);

public Route MapRoute(string name, string template, object defaults, object constraints, object dataTokens);

}

2. ASP.NET Core 路由的工作原理

当客户端发送一个 HTTP 请求时,服务器会查找应用程序中注册的所有路由。如果找到了匹配的路由,服务器就会调用定义在该路由中的处理程序来处理该请求。

在 ASP.NET Core 中,路由是在应用程序启动时配置的。当应用程序收到请求时,请求的 URL 会被解析并匹配到应用程序中适当的路由,然后调用该路由的处理程序来处理请求。

2.1 URL 解析

URL 解析是将 URL 分解为其组件的过程。一个 URL 由多个部分组成,例如协议、主机名、端口号、路径、查询字符串和片段。该过程的目的是将 URL 分解为这些组件,这样它们就可以被处理并映射到应用程序中相应的路由上。

2.2 路由匹配

路由匹配是将 URL 映射到相应的路由的过程。在 ASP.NET Core 中,服务器会按照定义的路由顺序依次遍历所有路由,并尝试将 URL 映射到每一个路由上。

如果 URL 能够匹配路由模板,服务器就会激活匹配路由的处理程序,处理程序将处理该请求。如果 URL 无法匹配任何路由,服务器则会返回一个 404(页面未找到)错误。

3. 路由模板

路由模板是用于匹配 URL 的文本模式。它包括一个或多个路由参数,用大括号 { } 括起来。路由模板中的参数会被绑定到处理程序的相应参数上。

例如,下面是一个使用路由模板的示例:

routes.MapRoute(

name: "default",

template: "{controller=Home}/{action=Index}/{id?}");

在上述示例中,我们定义了一个名为 "default" 的路由。其模板为 "{controller=Home}/{action=Index}/{id?}", 这意味着它将匹配任意形式为 /{controller}/{action}/{id} 的 URL。

如果 URL 中包含了用于路由参数的值,则这些值将被绑定到处理程序的相应参数上。例如,对于 URL /MyController/MyAction/42,Route 实例将会按照如下方式匹配出控制器名称、动作名称和 ID 值:

{ controller = "MyController", action = "MyAction", id = "42" }

4. 路由限制条件

ASP.NET Core 路由支持用于限制 URL 的模板的特殊条件。

4.1 HTTP 方法

可以使用特殊的 "http method" 模板参数来指定 URL 只匹配特定的 HTTP 方法:

routes.MapRoute(

name: "default",

template: "{controller=Home}/{action=Index}/{id?}",

defaults: new { id = new Microsoft.AspNetCore.Mvc.Routing.HttpMethodRouteConstraint("GET") });

上述代码将只匹配 HTTP GET 方法的 URL。

4.2 正则表达式

可以使用正则表达式模板约束来指定 URL 的格式。下面是一个使用正则表达式模板约束的示例:

routes.MapRoute(

name: "default",

template: "{controller}/{action}/{id?}",

constraints: new { id = new Microsoft.AspNetCore.Routing.Constraints.RegexRouteConstraint(@"\d+") }

);

上述代码将只匹配 ID 值为数字的 URL。注意,我们在正则表达式中使用了 "\d+" 来匹配一个或多个数字。

5. 总结

ASP.NET Core 路由是将传入的 URL 映射到处理该 URL 的代码中的机制。路由由 Route 类和 RouteCollection 类组成,它们允许您定义应用程序中的 URL 结构,并映射到代码中。

在 ASP.NET Core 中,路由是在应用程序启动时配置的。当应用程序收到请求时,请求的 URL 会被解析并匹配到应用程序中适当的路由,然后调用该路由的处理程序来处理请求。

路由模板是用于匹配 URL 的文本模式,它包括一个或多个路由参数,用大括号 {} 括起来。路由限制条件包括 HTTP 方法限制和正则表达式模板约束,这些条件可以帮助您进一步控制 URL 的匹配方式。

后端开发标签