每日一面:.NET Core可以自定义中间件吗?

共 3498字,需浏览 7分钟

 ·

2021-11-26 08:29

    NetCore中有一个主要的概念就是中间件的使用,中间件是组装到应用程序管道中以处理请求和响应的软件;中间件可以拦截请求,进行管道逻辑判断开发。中间件可以使用第三方或者系统自带的,究竟自己可不可以写中间件呢?

    当然是可以的,微软还是牛逼的。

    新建一个Core项目之后看到StartUp.cs这里。我们看到最后一个中间件是 hello  world 中间件这里

     public void Configure(IApplicationBuilder app, IWebHostEnvironment env)        {            if (env.IsDevelopment())            {                app.UseDeveloperExceptionPage();            }            app.UseRouting();           ///示例中间件            app.UseEndpoints(endpoints =>            {                endpoints.MapGet("/", async context =>                {                    await context.Response.WriteAsync("Hello World 中间件!");                });            });//在页面打印Hello world 中间件!         }

 

3d09148490d60ff3a9cb02538a4666c0.webp

运行结果效果。

至于这个为什么是最后一个中间件,如果看到源代码的话就知道他没有再向下一层提交了

也可以F12看看解释

Microsoft.AspNetCore.Routing.EndpointMiddleware中间件添加到指定的Microsoft.AspNetCore.Builder.iaApplicationBuilderMicrosoft.AspNetCore.Routing.EndpointDataSource从配置的Microsoft.AspNetCore.Routing.IEndpointRouteBuilder生成的实例。Microsoft.AspNetCore.Routing.EndpointMiddleware将执行Microsoft.AspNetCore.Http.Endpoint与当前请求关联。

好了,现在我们要加一个自己的中间件,怎么弄呢。当然是参考系统自带的,这里需要用到工具查看我就不一一列举了。

直接写自定义的这个代码吧

 public class Middleware1    {        private readonly RequestDelegate _next;        ///         /// 管道执行到该中间件时候下一个中间件的RequestDelegate请求委托,如果有其它参数,也同样通过注入的方式获得        ///         ///         public Middleware1(RequestDelegate next)        {            //通过注入方式获得对象            _next = next;        }        ///         /// 自定义中间件要执行的逻辑        ///         ///         ///         public async Task Invoke(HttpContext context)        {            Console.WriteLine("Request 中间件1");//请求进来时逻辑,打印一句话            context.Response.Redirect("https://docs.microsoft.com/");//响应出去时逻辑,为了验证,这里跳转到            await _next(context);//把context传进去执行下一个中间件                                                              }    }

 

我们主要看到这个Invoke这里

添加Invoke方法(本质就是根据委托RequestDelegate创建的方法)ll/作用:用来将当前的请求传递给下一个中间件

   ///   /// 自定义中间件要执行的逻辑  ///    ///    ///   public async Task Invoke(HttpContext context)       {            Console.WriteLine("Request 中间件1");//请求进来时逻辑,打印一句话            context.Response.Redirect("https://docs.microsoft.com/");//响应出去时逻辑,为了验证,这里跳转到            await _next(context);//把context传进去执行下一个中间件                                                          }

接下来我们需要使用扩展方法把这个中间件接上去

    public static class MyCustExtentions    {        public static IApplicationBuilder UseMyCustHomePage(this IApplicationBuilder app)        {            if (app == null)            {                throw new ArgumentNullException("app");            }            //这里,把我们写好的中间件注入            return app.UseMiddleware(Array.Empty<object>());        }    }

 

StartUp中使用自定义的中间件

 public void Configure(IApplicationBuilder app, IWebHostEnvironment env)        {            if (env.IsDevelopment())            {                app.UseDeveloperExceptionPage();            }            app.UseMyCustHomePage();//这里就是我们自定的中间件            app.UseRouting();            app.UseEndpoints(endpoints =>            {                endpoints.MapGet("/", async context =>                {                    await context.Response.WriteAsync("Hello World 中间件!");                });            });        }

运行结果

a2cb539ed8ecd24f29505535ff8414e5.webp

 

运行结果调整到了微软官方文档,这是一个简单的例子,重点理解中间件这种东西,有点像审批模式一样。

参考:https://www.cnblogs.com/jhzou/p/14361254.html

版权申明:本文来源于网友收集或网友提供,仅供学习交流之用,如果有侵权,请转告版主或者留言,本公众号立即删除。


支持小微:

腾讯云 双十二活动!玩服务器的可以搞搞!

轻量服务器  2核4G 198元/3年  

爆款1核2G云服务器首年48元  

链接:https://curl.qcloud.com/2elBqJQF


右下角,您点一下在看图片adcf47b2cbb4c5871b5f788d84314393.webp

小微工资涨1毛

商务合作QQ:185601686



浏览 26
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报