• 十二个 ASP.NET Core 例子——中间件


      目录:

    1. 什么是中间件(IApplicationBuilder)
    2. 创建
    3. 顺序规则
    4. Asp.Net Core 内置的中间件

          1.什么是中间件

          官方:中间件是组装成应用程序管道以处理请求和响应的软件。每个组件选择是否将请求传递给流水线中的下一个组件,并且可以在管道中调用下一个组件之前和之后执行某些操作。请求代理用于构建请求管道。请求委托处理每个HTTP请求。

          个人:对Http请求进行操作的逻辑块。逻辑块可以调用另外一个,也可以马上中断返回。

       2.创建中间件

    创建中间件主要的操作函数:Run,Use,Map

    Run:终止管道,返回response之前的一次逻辑操作

    Use:逻辑操作,可以调用下一个中间件

    Map: 根据地址的不同,操作不同的逻辑

    注意点:如果在use中 调用下一个中间件,而这个中间是run,并且,在run后面还有中间件,那么use的所有逻辑都会处理完,而不是直接中断返回

            public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
            {
                app.Use(async (context, next) =>
                {
                    await context.Response.WriteAsync("use1 ");
                    await next();
                    await context.Response.WriteAsync(" use2");
                });
    
                app.Run(async context =>
                {
                    await context.Response.WriteAsync("run ");
                });
            }
    View Code

     Map:

    public class Startup
    {
        private static void HandleMapTest1(IApplicationBuilder app)
        {
            app.Run(async context =>
            {
                await context.Response.WriteAsync("Map Test 1");
            });
        }
    
        private static void HandleMapTest2(IApplicationBuilder app)
        {
            app.Run(async context =>
            {
                await context.Response.WriteAsync("Map Test 2");
            });
        }
    
        public void Configure(IApplicationBuilder app)
        {
            app.Map("/map1", HandleMapTest1);
    
            app.Map("/map2", HandleMapTest2);
    
            app.Run(async context =>
            {
                await context.Response.WriteAsync("Hello from non-Map delegate. <p>");
            });
        }
    }
    View Code

     3.顺序规则

      添加中间件的顺序就是在请求上调用它们的顺序,此排序对于安全性,性能和功能至关重要。下面直接搬运

      配置方法(如下所示)添加了以下中间件组件:

    1. 异常/错误处理
    2. 静态文件服务器
    3. 认证
    4. MVC
            public void Configure(IApplicationBuilder app)
            {
                app.UseExceptionHandler("/Home/Error"); // Call first to catch exceptions
                // thrown in the following middleware.
    
                app.UseStaticFiles();                   // Return static files and end pipeline.
    
                app.UseIdentity();                     // Authenticate before you access
                // secure resources.
    
                app.UseMvcWithDefaultRoute();          // Add MVC to the request pipeline.
            }
    View Code

    在上面的代码中,UseExceptionHandler是添加到管道中的第一个中间件组件,因此它捕获在以后的调用中发生的任何异常。静态文件中间件在管道中提前调用,因此可以处理请求和短路,而无需通过剩余的组件。静态文件中间件提供没有授权检查。由其提供的任何文件,包括wwwroot下的文件都是公开的。如果请求不由静态文件中间件处理,则将其传递给执行身份验证的Identity中间件(app.UseIdentity)。身份不会使未经身份验证的请求发生短路。虽然身份认证请求,但授权(和拒绝)仅在MVC选择特定控制器和操作之后才会发生

    4.内置中间件

  • 相关阅读:
    [小北De编程手记] : Selenium For C# 教程目录
    [小北De编程手记] [Lesson 02] AutoFramework构建 之 Page Objects
    [小北De编程手记] Lesson 01
    [小北De编程手记] : Lesson 06 玩转 xUnit.Net 之 定义自己的FactAttribute
    [小北De编程手记] : Lesson 05 玩转 xUnit.Net 之 从Assert谈UT框架实践
    [小北De编程手记] : Lesson 04 玩转 xUnit.Net 之 Fixture(下)
    [小北De编程手记] : Lesson 03 玩转 xUnit.Net 之 Fixture(上)
    [小北De编程手记] : Lesson 02 玩转 xUnit.Net 之 基本UnitTest & 数据驱动
    [小北De编程手记] : Lesson 01 玩转 xUnit.Net 之 概述
    [小北De编程手记] : Lesson 08
  • 原文地址:https://www.cnblogs.com/TeemoHQ/p/6829974.html
Copyright © 2020-2023  润新知