public class RouteHandler : IRouteHandler, IRouter
{
// ...略
public Task RouteAsync(RouteContext context)
{
context.Handler = _requestDelegate;
return TaskCache.CompletedTask;
}
}
什么都没干,仅仅是将传入进来的 RequestDelegate 赋值给了 RouteContext 的处理程序。
最后,代码会执行到 RouterMiddleware 类中的 Invoke 方法的最后一行 await context.Handler(context.HttpContext),这个时候开始调用Handler委托,执行用户代码。
总结
我们来总结一下以上流程:
首先传入请求会到注册的 RouterMiddleware 中间件,然后它 RouteAsync 按顺序调用每个路由上的方法。当一个请求到来的时候,IRouter实例选择是否处理已经设置到 RouteContext Handler 上的一个非空 RequestDelegate。如果Route已经为该请求设置处理程序,则路由处理会中止并且开始调用设置的Hanlder处理程序以处理请求。如果当前请求尝试了所有路由都没有找到处理程序的话,则调用next,将请求交给管道中的下一个中间件。
关于路由模板和参数约束源码处理流程就不一一说了,有兴趣可以直接看下源码。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持易采站长站。








