请解释 .NET 中中间件的概念,并说明在 ASP.NET Core 中如何实现自定义中间件?
考察说明
考查对 ASP.NET Core 请求管道中中间件机制的理解及自定义实现能力。
回答思路
- 【回答框架 1】中间件是 ASP.NET Core 请求管道中的组件,每个中间件可检查、修改请求或响应,并决定是否调用下一个中间件,形成链式处理。
- 【回答框架 2】创建自定义中间件通常通过约定式类,包含 RequestDelegate 类型的 next 参数和 InvokeAsync 方法,也可通过工厂或基于约定的方式实现。
- 【回答框架 3】在 Startup 或 Program 中通过 Use、Run、Map 等扩展方法注册中间件,顺序决定执行顺序,Use 可短路管道。
- 【回答框架 4】中间件支持依赖注入,可注入服务,但需注意生命周期,Scoped 服务需通过 InvokeAsync 参数注入。
- 【回答框架 5】自定义中间件常用于日志、认证、错误处理等横切关注点,需考虑性能与异常处理。
- 【关键点 1】中间件构成请求管道,按注册顺序执行。
- 【关键点 2】自定义中间件需实现 InvokeAsync 方法并调用 next。
- 【关键点 3】Use 可短路,Run 终止管道,Map 按路径分支。
- 【关键点 4】依赖注入时注意 Scoped 服务的注入方式。
- 【关键点 5】中间件顺序影响功能,如异常处理应靠前。
- 【易错点 1】不要忘记调用 next 导致管道中断。
- 【易错点 2】避免在中间件中注入 Scoped 服务到构造函数,应通过 InvokeAsync 参数注入。
- 【易错点 3】中间件顺序错误可能导致功能失效,如静态文件中间件应放在认证前。