Sommaire

Le middleware et les contraintes

Chaque requête est traitée via un unique middleware de routage intitulé RouterMiddleware. Ce dernier va ainsi rediriger la requête vers un handler qui va traiter la requête. Son code est très simple :

public async Task Invoke(HttpContext httpContext) 
{ 
   var context = new RouteContext(httpContext); 
   context.RouteData.Routers.Add(_router); 
 
   await _router.RouteAsync(context); 
 
   if (context.Handler == null) 
   { 
       _logger.RequestDidNotMatchRoutes(); 
       await _next.Invoke(httpContext); 
   } 
   else 
   { 
       httpContext.Features[typeof(IRoutingFeature)] = new 
RoutingFeature() 
       { 
           RouteData = context.RouteData, 
       }; 
 
       await context.Handler(context.HttpContext); 
   } 
}

La première partie du middleware permet la création d’un objet de contexte pour la gestion du routage de type RouteContext. C’est cet objet qui va être modifié dans le processus de détermination d’une route, et qui va contenir la suite des opérations (si une route est trouvée) via sa propriété Handler de type RequestDelegate.

var context = new RouteContext(httpContext);  ...