aspnetcore的中间件

Posted diwu0510

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了aspnetcore的中间件相关的知识,希望对你有一定的参考价值。

Run会终止中间件继续传递

 1 app.Run(new RequestDelegate(async context =>
 2 {
 3         await Task.Run(() =>
 4         {
 5                 context.Response.WriteAsync("被Run截取到了");
 6          });
 7 }));
 8 
 9 app.Run(new RequestDelegate(async context =>
10 {
11         await context.Response.WriteAsync("被Run截取到了");
12 }));

 Use 会继续传递

app.Use(async (context, next) =>
{
        context.Response.Headers.Add("ResponseAt", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ffff"));
        await next();
});

Map和MapWhen

app.Map("/Test", configuration =>
            {
                configuration.Run(async context =>
                {
                    await context.Response.WriteAsync("Test被截取了");
                });
            });

            app.MapWhen(
                context => context.Request.Path.Value.Contains("Test", StringComparison.CurrentCultureIgnoreCase),
                configuration => configuration.Run(async context =>
                {
                    await context.Response.WriteAsync("带Test的被截取了");
                }));

使用UseMiddleware

public class MyMiddleware
    {
        private readonly RequestDelegate _next;

        private readonly ILogger _logger;

        private readonly string _prefix;

        public MyMiddleware(RequestDelegate next, ILoggerFactory factory, string prefix)
        {
            _next = next;
            _logger = factory.CreateLogger<MyMiddleware>();
            _prefix = prefix;
        }


        public async Task Invoke(HttpContext context)
        {
            _logger.LogInformation("" + _prefix + "" + context.Request.Path.Value);
            context.Response.Headers.Add("ResponseAt", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ffff"));
            await _next(context);
        }
    }
app.UseMiddleware<MyMiddleware>("博客");

 

以上是关于aspnetcore的中间件的主要内容,如果未能解决你的问题,请参考以下文章

Microsoft.AspNetCore.Server.IIS.Core.IISHttpContextOfT 中间件 C# .NET Core 2.2

AspNetCore开源中间件-VueRouterHistory

UseAuthorization 及相关源代码

跟我一起 掌握AspNetCore底层技术和构建原理

开发短网址平台的思路

AspNetCore7.0源码解读之UseMiddleware