每日一面:.NET Core可以自定义中间件吗?
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 中间件!}

运行结果效果。
至于这个为什么是最后一个中间件,如果看到源代码的话就知道他没有再向下一层提交了
也可以F12看看解释
将Microsoft.AspNetCore.Routing.EndpointMiddleware中间件添加到指定的Microsoft.AspNetCore.Builder.iaApplicationBuilder与Microsoft.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 中间件!");});});}
运行结果

运行结果调整到了微软官方文档,这是一个简单的例子,重点理解中间件这种东西,有点像审批模式一样。
参考:https://www.cnblogs.com/jhzou/p/14361254.html
版权申明:本文来源于网友收集或网友提供,仅供学习交流之用,如果有侵权,请转告版主或者留言,本公众号立即删除。
支持小微:
腾讯云 双十二活动!玩服务器的可以搞搞!
轻量服务器 2核4G 198元/3年
爆款1核2G云服务器首年48元
链接:https://curl.qcloud.com/2elBqJQF
右下角,您点一下在看图片
小微工资涨1毛
商务合作QQ:185601686
评论
