我是靠谱客的博主 无语煎蛋,最近开发中收集的这篇文章主要介绍21 | 中间件,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1. 核心对象

IApplicationBuilder

RequestDelegate

2. 注册委托的方式注册逻辑

Startup.cs文件


public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
//注册委托的方式注册逻辑
app.Use(async (context, next) =>
{
await next(); //执行后续的中间件
await context.Response.WriteAsync("hello");
});
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}

3. 对特定的路径指定中间件


public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
//对特定的路径指定中间件时,使用map
app.Map("/abc", builder =>
{
//Use:像注册一个完整的中间件一样,将我们的next也注入进来,可以决定是否执行执行后续的中间件
builder.Use(async (context, next) =>
{
await next(); //执行后续的中间件
await context.Response.WriteAsync("hello");
});
});
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}

4. 对路径做特殊判断


public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
//对路径做特殊判断
app.MapWhen(content =>
{
return content.Request.Query.Keys.Contains("abc");
}, builder =>
{
//Run:表示这里就是中间件执行的末端,也就不在执行后面的中间件了,在这里将返回请求
builder.Run(async content =>
{
await content.Response.WriteAsync("new abc");
});
});
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}

5. 自定义中间件


public class MyMiddleWare
{
RequestDelegate _next;
ILogger _logger;
public MyMiddleWare(RequestDelegate next, ILogger<MyMiddleWare> logger)
{
_next = next;
_logger = logger;
}
/// <summary>
/// 定义中间件用了一个约定的方式,中间件的类包含了一个方法,Invoke或者InvokeAsync,
/// 只要类包含了这样的方法,就可以把它作为一个中间件注册进去
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
public async Task InvokeAsync(HttpContext context)
{
using (_logger.BeginScope("TraceIdentifier:{}", context.TraceIdentifier))
{
_logger.LogDebug("MyMiddleWare执行完成");
await _next(context);
_logger.LogDebug("MyMiddleWare执行结束");
}
}
}

public static class MyBuildExtensions
{
public static IApplicationBuilder UseMyMiddleware(this IApplicationBuilder app)
{
return app.UseMiddleware<MyMiddleWare>();
}
}

Startup.cs文件


public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
//自定义中间件
app.UseMyMiddleware();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}

最后

以上就是无语煎蛋为你收集整理的21 | 中间件的全部内容,希望文章能够帮你解决21 | 中间件所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部