排名
7
文章
192
粉丝
15
评论
16
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256


欢迎加群交流技术

前言
接着上一篇
开发中间件
基于约定的中间件开发
在 ASP.NET Core 官网上面提供了一个简单的例子,通过中间件来设置应用的区域信息,代码如下:
- public void Configure(IApplicationBuilder app){
- app.Use((context, next) =>
- {
- var cultureQuery = context.Request.Query["culture"];
- if (!string.IsNullOrWhiteSpace(cultureQuery))
- { var culture = new CultureInfo(cultureQuery);
-
- CultureInfo.CurrentCulture = culture;
- CultureInfo.CurrentUICulture = culture;
- }
- // Call the next delegate/middleware in the pipeline
- return next();
- });
-
- app.Run(async (context) =>
- { await context.Response.WriteAsync(
- $"Hello {CultureInfo.CurrentCulture.DisplayName}");
- });
- }
通过这段代码,我们可以通过QueryString的方式设置应用的区域信息。但是这样的代码怎样复用呢?注意,中间件一定要是可复用、方便复用的。我们来改造这段代码:
- public class RequestCultureMiddleware{
-
- private readonly RequestDelegate _next;
-
- public RequestCultureMiddleware(RequestDelegate next)
- {
- _next = next;
- }
-
- public async Task InvokeAsync(HttpContext context)
- { //......
-
- // Call the next delegate/middleware in the pipeline
- await _next(context);
- }
- }
这里定义一个委托,用于执行具体的业务逻辑,然后在Configure中调用这个委托:
- app.UseMiddleware<RequestCultureMiddleware>();
这样还是不太方便,不像我们使用app.UseMvc()这么方便,那么我们来添加一个扩展方法,来实现更方便的复用:
- public static class RequestCultureMiddlewareExtensions{
- public static IApplicationBuilder UseRequestCulture(this IApplicationBuilder builder)
- {
- return builder.UseMiddleware<RequestCultureMiddleware>();
- }
- }
然后我们就可以这样使用中间件了:
- app.UseRequestCulture();
通过委托构造中间件,应用程序在运行时创建这个中间件,并将它添加到管道中。这里需要注意的是,中间件的创建是单例的,每个中间件在应用程序生命周期内只有一个实例。
原:ASP.NET Core 中间件基本用法 - 拓荒者-NET - 博客园 (cnblogs.com)
评价