核心端点路由在ASP.NET中的作用有哪些

  

核心端点路由在ASP。网中的作用有哪些?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

端点路由(端点路由)最早出现在ASP。净Core2.2,在ASP。净Core3.0提升为一等公民。

在端点路由出现之前,我们一般在请求处理管道的末尾,定义MVC中间件解析路由。这种方式意味着在处理管道中,MVC中间件之前的中间件将无法获得路由信息。

路由信息对于某些中间件非常有用,比如歌珥,认证中间件(认证过程可能会用到路由信息)。

同时端点路由提炼出<代码>端点概念,解耦路由匹配逻辑,请求分发。

由一对中间件组成:

UseRouting将路由匹配添加到中间件管道。该中间件查看应用程序中定义的端点集合,并根据请求选择最佳匹配.UseEndpoints将端点执行添加到中间件管道。

MapGet, MapPost等方法将处理逻辑连接到路由系统;

其他方法将ASP。核心网框架特性连接到路由系统。

    <李> MapRazorPages剃刀页面 <李> MapControllers为控制器李 <李> MapHub李为SignalR李 <> MapGrpcService李为gRPC

处于这对中间件上游的中间件:始终无法感知端点;
处于这对中间件之间的中间件,将会感知到端点,并有能力执行附加处理逻辑;
UseEndpoint是一个终点中间件;
没有匹配,则进入UseEndpoint之后的中间件。

放置在<代码> UseRouting ,<代码> UseEndpoints 之间的认证授权中间件可以:

感知被匹配的端点信息;在调度到端点之前,应用授权策略。

公共空间配置(IApplicationBuilder应用,IWebHostEnvironment env)
  {
  如果(env.IsDevelopment ())
  {
  app.UseDeveloperExceptionPage ();
  }//匹配端点的请求。
  app.UseRouting ();//端点意识到中间件。//中间件可以使用元数据匹配的端点。
  app.UseAuthentication ();
  app.UseAuthorization ();//执行匹配端点。
  app.UseEndpoints(端点=比;
  {//配置健康检查端点,需要一个授权用户。
  endpoints.MapHealthChecks (“/healthz") .RequireAuthorization ();//配置另一个端点,没有授权需求。
  endpoints.MapGet(“/?异步上下文=比;
  {
  等待context.Response.WriteAsync (“Hello World !”);
  });
  });
  }

以上在<代码>/健康定义了健康检查,该端点定义了<代码> IAuthorizeData>

我们在UseRouting, UseEndpoints之间添加一点口水代码:感知端点:

 app.Use(下=比;上下文=比;
  {
  var端点=context.GetEndpoint ();
  如果端点为空)
  {
  返回Task.CompletedTask;
  }
  Console.WriteLine($“端点:{endpoint.DisplayName}“);
  
  如果端点RouteEndpoint RouteEndpoint)
  {
  Console.WriteLine(“端点路由模式:“+
  routeEndpoint.RoutePattern.RawText);
  }
  
  foreach (var endpoint.Metadata元数据)
  {
  Console.WriteLine($“端点有元数据:{元数据}“);
  }
  返回下一个(上下文);
  });

当请求<代码>/healthz> AuthorizeAttribute>

昂诵亩说懵酚稍贏SP。网中的作用有哪些"

故猜想认证授权中间件要对<代码>/healthz> AuthorizeAttribute>

于是翻阅Github <代码> AuthorizationMiddleware 3.0源码:发现确实关注了端点

//- - - - -截取自https://github.com/dotnet/aspnetcore/blob/master/src/Security/Authorization/Policy/src/AuthorizationMiddleware.cs-----   如果(端点!=null)   {   上下文。项目(AuthorizationMiddlewareInvokedWithEndpointKey)=AuthorizationMiddlewareWithEndpointInvokedValue;   }   var authorizeData=https://www.yisu.com/zixun/endpoint& # 63; .Metadata.GetOrderedMetadata () & # 63; & # 63;Array.Empty ();   var=等待AuthorizationPolicy政策。CombineAsync (_policyProvider authorizeData);   如果(政策==null)   {   等待_next(上下文);   返回;   }   var policyEvaluator=context.RequestServices.GetRequiredService ();   ……

而<代码> AuthorizeAttribute 确实是实现了<代码> IAuthorizeData 接口。

binggo,猜想得到源码验证。

核心端点路由在ASP.NET中的作用有哪些