ASP.NET CORE 自定义中间件

2023-11-30 19:23:54 浏览数 (2)

ASP.NET CORE 自定义中间件

一般是两种方式, 通过lambda表达式,直接在startup类中的configure中书写。

代码语言:javascript复制
// 通过查询字符串设置当前请求的区域性
app.Use(async (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
            await next();
        });

或者是使用C#类。

代码语言:javascript复制
    // 自定义中间件类
    public class MyCustomMiddleWare
    {
        // 字段,只读
        private readonly RequestDelegate _next;
        // 必须有一个 RequestDelegate 类型参数的公共构造函数
        public MyCustomMiddleWare(RequestDelegate next)
        {
            _next = next;
        }
        // 必须有一个 Invoke或InvokeAsync 方法,返回Task,接受第一个为HTTPcontext的参数
        public async Task InvokeAsync(HttpContext context)
        {
            // 自定义处理逻辑
            // 这里是 设置当前请求的区域性相关信息
            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
            await _next(context);
        }
    }
代码语言:javascript复制
    // 扩展方法必须在非泛型静态类型中定义
    public static class MyCustomMiddleWareExtensions
    {
        // 静态方法,公开中间件
        public static IApplicationBuilder UseMyCustom(
            this IApplicationBuilder builder)
        {
            return builder.UseMiddleware<MyCustomMiddleWare>();
        }
    }

最后在startup的configure中注册中间件 app.UseMyCustom();

0 人点赞