(精华)2020年9月17日 ASP.NET Core 中间件详解

举报
愚公搬代码 发表于 2021/10/18 23:04:40 2021/10/18
【摘要】 1.基本中间件的使用 public static void Start() { var host = Host.CreateDefaultBuilder() .Configure...

1.基本中间件的使用

public static void Start()
{
    var host = Host.CreateDefaultBuilder()
        .ConfigureWebHost(builder => builder
            .UseKestrel()
            .Configure(app => 
                app.Run(context => 
                    context.Response.WriteAsync("Hello!"))
            )
        ).Build();
    host.Run();
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
public static class Sample02
{
    public static void Start()
    {
        var host = Host.CreateDefaultBuilder()
            .ConfigureWebHostDefaults(builder => builder
                .Configure(app => app
                    .Use(Middleware1)
                    .Use(Middleware2)
                )
            ).Build();
        host.Run();
    }

    private static RequestDelegate Middleware1(RequestDelegate next)
    {
        async Task App(HttpContext context)
        {
            await context.Response.WriteAsync("Middleware 1 Begin.");
            await next(context);
            await context.Response.WriteAsync("Middleware 1 End.");
        }
        return App;
    }


    private static RequestDelegate Middleware2(RequestDelegate next)
    {
        async Task App(HttpContext context)
        {
            await context.Response.WriteAsync("Middleware 2 Begin.");
        }
        return App;
    }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

2.强类型中间件的使用

public class Sample03
{
    public class HelloMiddleware : IMiddleware
    {
        public async Task InvokeAsync(HttpContext context, RequestDelegate next)
        {
            await context.Response.WriteAsync("Hello");
        }
    }

    public static void Start()
    {

        var host = Host.CreateDefaultBuilder()
            .ConfigureWebHostDefaults(builder => builder
                .ConfigureServices(collection => collection.AddSingleton<HelloMiddleware>())
                .Configure(app => app
                    .UseMiddleware<HelloMiddleware>()
                )
            ).Build();
        host.Run();
    }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

3.约定中间件的使用

public class Sample04
{
    public class HelloMiddleware
    {
        private readonly RequestDelegate _next;
        private readonly string _content;
        private readonly bool _isToNext;

        public HelloMiddleware(RequestDelegate next, string content, bool isToNext = false)
        {
            _next = next;
            _content = content;
            _isToNext = isToNext;
        }

        public async Task InvokeAsync(HttpContext httpContext)
        {
            await httpContext.Response.WriteAsync($"Hello {_content}!\r\n");
            if (_isToNext) await _next(httpContext);
        }
    }

    public static void Start()
    {

        var host = Host.CreateDefaultBuilder()
            .ConfigureWebHostDefaults(builder => builder
                .Configure(app => app
                    .UseMiddleware<HelloMiddleware>("Rick", true)
                    .UseMiddleware<HelloMiddleware>("Motry")
                )
            ).Build();
        host.Run();
    }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

4.Startup的由来和使用

public static class Sample06
    {
        public class Startup
        {
            public void ConfigureServices(IServiceCollection services)
            {
                foreach (var service in services)
                {
                    var serviceName = service.ServiceType.Name;
                    var implType = service.ImplementationType;
                    if (implType != null)
                    {
                        Console.WriteLine($"{service.Lifetime, -15}{serviceName,-40}{implType.Name}");
                    }
                }
            }

            public void Configure(IApplicationBuilder app)
            {

            }
        }

        public static void Start()
        {
            var host = Host.CreateDefaultBuilder()
                .ConfigureWebHostDefaults(builder => builder
                    .UseStartup<Startup>())
                .Build();
            
            host.Run();
        }
    }

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
public class Sample07
    {
        public class Startup
        {
            public Startup(IConfiguration configuration, IHostEnvironment hostingEnvironment)
            {
                Debug.Assert(configuration != null);
                Debug.Assert(hostingEnvironment != null);
            }

            public void ConfigureServices(IServiceCollection services)
            {
            }

            public void Configure(IApplicationBuilder app)
            {
            }
        }

        public static void Start()
        {
            var host = Host.CreateDefaultBuilder()
                .ConfigureWebHostDefaults(builder => builder
                    .UseStartup<Startup>())
                .Build();
            
            host.Run();
        }
    }

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
public class Sample09
    {

        public class Test1{ };
        public class Test2{ };

        public class TestMiddleware
        {
            private readonly RequestDelegate _next;

            public TestMiddleware(RequestDelegate next, Test1 test1, Test2 test2)
            {
                Debug.Assert(test1 != null);
                Debug.Assert(test2 != null);
                _next = next;
            }

            public async Task InvokeAsync(HttpContext httpContext)
            {
                Debug.Assert(_next != null);
                await httpContext.Response.WriteAsync("Test");

            }
        }

        public class Startup
        {

            public void ConfigureServices(IServiceCollection services)
            {
                services
                    .AddSingleton<Test1>()
                    .AddSingleton<Test2>();
            }

            public void Configure(IApplicationBuilder app)
            {
                app.UseMiddleware<TestMiddleware>();
            }
        }

        public static void Start()
        {
            var host = Host.CreateDefaultBuilder()
                .ConfigureWebHostDefaults(builder => builder
                    .UseStartup<Startup>())
                .Build();
            
            host.Run();
        }
    }

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
public class Sample10
    {

        public class Test1{ };
        public class Test2{ };

        public class TestMiddleware
        {
            private readonly RequestDelegate _next;

            public TestMiddleware(RequestDelegate next)
            {
                
                _next = next;
            }

            public async Task InvokeAsync(HttpContext httpContext,Test1 test1, Test2 test2)
            {
                Debug.Assert(test1 != null);
                Debug.Assert(test2 != null);
                await httpContext.Response.WriteAsync("Test");

            }
        }

        public class Startup
        {

            public void ConfigureServices(IServiceCollection services)
            {
                services
                    .AddSingleton<Test1>()
                    .AddSingleton<Test2>();
            }

            public void Configure(IApplicationBuilder app)
            {
                app.UseMiddleware<TestMiddleware>();
            }
        }

        public static void Start()
        {
            var host = Host.CreateDefaultBuilder()
                .ConfigureWebHostDefaults(builder => builder
                    .UseStartup<Startup>())
                .Build();
            
            host.Run();
        }
    }

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
public class Sample11
    {
        public class Test1{ }
        public class Test2{ }       
        public static void Start()
        {
            var host = Host.CreateDefaultBuilder()
                .ConfigureWebHostDefaults(builder => builder
                    .ConfigureServices(collection => collection
                        .AddSingleton<Test1>()
                        .AddSingleton<Test2>()
                        .AddControllersWithViews())
                    .Configure(app=>app
                        .UseRouting()
                        .UseEndpoints(routeBuilder => routeBuilder.MapControllers()))
                )
                .Build();
            
            host.Run();
        }
    }

    public class Startup
    {
        public void Configure(IApplicationBuilder app)
        {

        }

        public void ConfigureServices(IServiceCollection services)
        {

        }
    }

    public class HomeController : Controller
    {
        private readonly Sample11.Test1 _test1;

        public HomeController(Sample11.Test1 test1)
        {
            _test1 = test1;
        }

        [HttpGet("/")]
        public IActionResult Index()
        {
            ViewBag.Test1 = _test1;
            return View();
        }
    }

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51

文章来源: codeboy.blog.csdn.net,作者:愚公搬代码,版权归原作者所有,如需转载,请联系作者。

原文链接:codeboy.blog.csdn.net/article/details/108524678

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。