1. 核心对象
IApplicationBuilder
RequestDelegate
2. 注册委托的方式注册逻辑
Startup.cs文件
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17public 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. 对特定的路径指定中间件
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21public 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. 对路径做特殊判断
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23public 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. 自定义中间件
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26public 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执行结束"); } } }
复制代码
1
2
3
4
5
6
7
8
9public static class MyBuildExtensions { public static IApplicationBuilder UseMyMiddleware(this IApplicationBuilder app) { return app.UseMiddleware<MyMiddleWare>(); } }
Startup.cs文件
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { //自定义中间件 app.UseMyMiddleware(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); }
最后
以上就是无语煎蛋最近收集整理的关于21 | 中间件的全部内容,更多相关21内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复