zoukankan      html  css  js  c++  java
  • .net core 2.x到3.x变化 -> Endpoint Routing

    路由定义:负责匹配传入的HTTP请求,并将这些请求分发到应用程序的可执行终结点。路由使用“终结点”(Endpoint) 来表示应用中的逻辑终结点

    Endpoint: 是应用程序的可执行请求处理代码的单位,在应用程序中定义,并且在应用程序启动时配置,终结点匹配过程可以从请求的url中提取值,并且将这些值提供给请求处理

    终结点路由:路由终结点具有模板、元数据以及为终结点响应提供服务的请求委托,由使用两个扩展方法与中间件集成

      1.UseRouting 向中间件管道添加路由匹配。必须在任何路由感知中间件(授权,终结点执行等)之前 ,作用:根据当前请求找到endpoint

      2.UseEndpoints 向中间件管道添加终结点    作用:根据endpoint去执行请求的最终处理,也就是找到具体的action方法

    官方示例代码

    public void Configure(IApplicationBuilder app)
    {
        // Matches request to an endpoint.
        app.UseRouting();
    
        // Endpoint aware middleware. 
        // Middleware can use metadata from the matched endpoint.
        app.UseAuthorization();
    
        // Execute the matched endpoint.
        app.UseEndpoints(endpoints =>
        {
            // Configuration of app endpoints.
            endpoints.MapRazorPages();
            endpoints.MapGet("/", context => context.Response.WriteAsync("Hello world"));
            endpoints.MapHealthChecks("/healthz");
        });
    }

     介绍了前面的基础知识,那么究竟3.x之后为啥要引入endpoint 路由系统呢?

          在2.x版本,一个请求到响应的过程是这样的: 

           接收到请求后,通过一系列中间件管道事件,最终由route中间件把http请求和路由数据发送到mvc的router handler里,然后由mvc路由handler把请求与路由数据进行匹配,也就是匹配controller中的action方法进行处理请求,然后router中间件就会执行选中的action方法生成响应,最终响应原路返回到客户端。

    那么在3.x之后的变化:

        

    Endpoint routing  由2个中间件组成,也就是上面的Endpoint Routing和Endpoint 也就是对应上面的UseRouting 和UseEndpoints

       

    为啥要这么干呢???

    白话:但是这样的话其实会对执行router中间件之前的中间件来说是不友好的,比如授权中间件不能提前知道该请求会被哪个action方法执行,同时更好与mvc进行区分,解耦

    官方说明:

    1.   终结点和中间件与其他基于 ASP.NET Core 的技术(例如运行状况检查)进行良好的编排。
    2.  终结点可以在中间件和 MVC 中实现各种策略,例如 CORS 或者授权等
    3.     过滤器和特性 (attribute) 可以被放置在控制器的方法上。

    参考文档:

    https://docs.microsoft.com/zh-cn/aspnet/core/release-notes/aspnetcore-3.0?view=aspnetcore-3.1#endpoint-routing

    https://mp.weixin.qq.com/s/ptFa4-s6PVgPU-qB7XRXWg

  • 相关阅读:
    两台linux服务器相互拷贝文件的两个方法
    两台Linux服务器之间复制文件
    Linux两台服务器之间文件/文件夹拷贝
    Linux压缩和解压缩命令
    MongoDB学习笔记 1.1
    centos 7 MysSQL 5.6.39 二进制安装
    CentOS 7 Cobbler 配置 YUM仓库
    CentOS 7 Cobbler 自动化安装系统
    CentOS 7 Cobbler 安装
    OpenStack
  • 原文地址:https://www.cnblogs.com/mc-hui/p/12566753.html
Copyright © 2011-2022 走看看