asp.net core 自定义中间件 的基本使用

asp.net core 中间件 :基本 理解 和 Filter类似。 区别: filter是mvc中包含的功能,针对 action方法

中间件 则 包含 mvc 更偏向底层

两个基本的职责:
        选择是否将请求传递给管道中的下一个中间件。
        可以在管道中的下一个中间件前后执行一些工作。

更详细 中间件详解 请参考 转载: ASP.NET Core:中间件 - .NET开发菜鸟 - 博客园 (cnblogs.com)

下面 自定义中间件 的基本使用,一般中间件 都在  Program.cs中

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

//自定义 中间件 map 引流
app.Map("/test", mybuilder =>
{
    //use处理 并调用下一个中间件
    mybuilder.Use(async (context, next) =>
    {
        context.Response.ContentType="text/html";
        await context.Response.WriteAsync("1 start<br/>");//中间件中不要 输出内容 这是不符合规范的,这里只做演示。如果输出 不使用next 以免 造成混乱
        await next.Invoke();
        await context.Response.WriteAsync("1 end<br/>");
    });
    //use处理 并调用下一个中间件
    mybuilder.Use(async (context, next) =>
    {
        await context.Response.WriteAsync("2 start<br/>");
        await next.Invoke();
        await context.Response.WriteAsync("2 end<br/>");
    });
    //最终处理  终端中间件
    mybuilder.Run(async context =>
    {
        await context.Response.WriteAsync("Run<br>");
    });
});
app.Run();

最后结果 执行 顺序为

1 start
2 start
Run
2 end
1 end

上面 只是 为了演示。 一般 不要 使用。推荐使用下面的 中间件类

中间件类 不要 继承 和实现接口 但是必须规范

规范1 

构造函数中必须至少有 RequestDelegate

规范2

必须有 async Task  InvokeAsync方法 参数为 HttpContext 并且 方法名不能写错

namespace aspnetcore012
{
    public class Middleware
    {
        private readonly RequestDelegate _next;
        //规范 构造函数中必须至少有 RequestDelegate
        public Middleware(RequestDelegate next)
        {
            _next = next;
        }
        //必须有 async Task  InvokeAsync方法 参数为 HttpContext 并且 方法名不能写错
        public async Task InvokeAsync(HttpContext context)
        {
            await context.Response.WriteAsync("Middleware3 start <br/>");
            //调用下个 中间件
            await _next.Invoke(context);
            await context.Response.WriteAsync("Middleware3 end <br/>");
        }
    }
}

最后 需要在 Program.cs 添加 mybuilder.UseMiddleware<Middleware>();

....

mybuilder.UseMiddleware<Middleware>();

    //最终处理  终端中间件
    mybuilder.Run(async context =>
    {
        await context.Response.WriteAsync("Run<br>");
    });

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值