03中间件
中间件是一种装配到应用管道以处理请求和响应的组件,每个组件:
选择是否将请求传递到管道中的下一个组件
可在管道中的下一个组件前后执行工作
请求委托用于生成请求管道。请求委托处理每个HTTP请求。
使用RunMap和Use扩展方法来配置请求委托。可将一个单独的请求委托并行指定为匿名方法(称为并行中间件),或在可重用的类中对其进行定义。这些可重用的类和并行匿名方法即为中间件,也叫做中间件组件。请求管道中的每个中间件组件负责调用管道中的下一个组件,或使管道短路。当中间件短路时,它被称为“终端中间件”,因为它阻止中间件进一步处理请求。
ASP.NET Core 请求管道包含一系列请求委托,依次调用。 下图演示了这一概念。 沿黑色箭头执行。
通过以下示例观察中间件的执行过程
12345678910111213141516171819202122232425var builder = WebApplication.CreateBuilder(args);var app = builder.Build();app.Use(async(context,next)=>& ...
02依赖注入
ASP.NET Core支持依赖关系注入(DI)软件设计模式,这是一种在类及其依赖关系之间实现控制反转(IOC)的技术。
依赖关系注入概述
依赖项是指另一个对象所依赖的对象。
12345678910public class IndexModel : PageModel{ // 直接实例化MyDependency类(直接依赖) private readonly MyDependency _dependency = new MyDependency(); public void OnGet() { _dependency.WriteMessage("IndexModel.OnGet"); }}
在上述示例中,创建并直接依赖于 MyDependency 类。 代码依赖项会产生问题,应避免使用,原因如下:
要用不同的实现替换 MyDependency,必须修改 IndexModel 类。
如果 MyDependency 具有依赖项,则必须由 IndexModel 类对其进行配置 ...
01应用启动
IStartupFilter
使用IStartupFilter:
再应用的中间件管道的开头或末尾配置中间件,而无需显式调用Use{Middleware}。使用IStartupFilter在不显式注册默认中间件的情况下将默认值添加到管道的开头。
创建Configure方法的管道。IStartupFilter.Configure可以将中间件设置为在库添加的中间件之前或之后运行。
每个 IStartupFilter 可以在请求管道中添加一个或多个中间件。 筛选器按照添加到服务容器的顺序调用。 筛选器可在将控件传递给下一个筛选器之前或之后添加中间件,从而附加到应用管道的开头或末尾。
下面的示例演示如何使用 IStartupFilter 注册中间件。 RequestSetOptionsMiddleware 中间件从查询字符串参数中设置选项值:
RequestRequestSetOptionsMiddlewareRequestSetOptionsStartupFilter注册StartupFilter1234567891011121314151617181920 ...