概述
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 | 中间件所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复