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();