中间件是被组装成一个应用程序管道来处理请求和响应的软件组件。
每个组件选择是否传递给管道中的下一个组件的请求,并能之前和下一组分在管道中调用之后执行特定操作。
具体如图:
自己中间件类:
//自己写的中间件 public class RequestSetOptionsMiddleware { private readonly RequestDelegate next; private readonly IOptions<AppOptions> options; public RequestSetOptionsMiddleware(RequestDelegate next,IOptions<AppOptions> options) { this.next = next; // 下一个中间件 this.options = options;// } //系统会自动调用 public async Task Invoke(HttpContext httpContext) { Console.WriteLine("Invoke"); var option = httpContext.Request.Query["optiuon"]; if (string.IsNullOrWhiteSpace(option)) { await httpContext.Response.WriteAsync("this is test"); options.Value.Option = WebUtility.HtmlEncode(option); } else { await next(httpContext); } } }
中间件集扩展类:
//自定义扩展中间件-可在这里调用自己的中间件 public static class RequestSetOptionsExtensions { public static IApplicationBuilder UseRequestSetOptions(this IApplicationBuilder app) { app.UseMiddleware<RequestSetOptionsMiddleware>();//使用中间件 return app; } }
Startup->Configure中调用扩展的中间件集:
启动项目:
页面打印出中间件中输出的文字,说明中间件调用成功