每日一面:.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 中间件!
}
运行结果效果。
至于这个为什么是最后一个中间件,如果看到源代码的话就知道他没有再向下一层提交了
也可以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