一、中间件(Middleware)
1. 概念
在.NET Core中,中间件是一个请求委托的组件,它被串联在一起处理HTTP请求。每个中间件都可以决定是否将请求传递给下一个中间件,或者直接生成响应。
2. 作用
请求预处理:
身份验证:例如,使用
UseAuthentication
中间件来验证用户身份。请求限流:限制对应用程序的请求频率,防止恶意攻击或过载。
响应后处理:
响应压缩:使用
UseResponseCompression
中间件来减小响应体的大小,提高传输效率。CORS配置:使用
UseCors
中间件来配置跨域资源共享。路由请求:
路由:使用
UseRouting
和UseEndpoints
中间件来将请求映射到相应的处理程序。
3. 应用场景
身份验证和授权:在请求到达实际业务逻辑之前,通过中间件检查用户是否已经登录或具有执行操作的权限。
日志记录:记录请求的基本信息,如IP地址、请求路径、方法等,以便于监控和调试。
错误处理:捕获整个请求处理过程中的异常,并返回友好的错误信息。
二、过滤器(Filters)
1. 概念
在ASP.NET MVC和ASP.NET Core中,过滤器是用于在请求处理管道的特定阶段执行代码的特性。
2. 种类
行动过滤器(Action Filters):
OnActionExecuting
:在动作方法执行之前调用。OnActionExecuted
:在动作方法执行之后调用。结果过滤器(Result Filters):
OnResultExecuting
:在动作结果执行之前调用。OnResultExecuted
:在动作结果执行之后调用。异常过滤器(Exception Filters):
OnException
:在动作方法中发生未处理的异常时调用。资源过滤器(Resource Filters):
OnResourceExecuting
:在请求的资源被处理之前调用。OnResourceExecuted
:在请求的资源被处理之后调用。
3. 作用
权限验证:通过实现
IAuthorizationFilter
接口,可以在动作方法执行之前检查用户权限。性能监控:通过在
OnActionExecuting
和OnActionExecuted
中记录时间戳,可以监控动作方法的执行时间。异常处理:通过实现
IExceptionFilter
接口,可以捕获并处理动作方法中抛出的异常。
三、拦截器(Interceptors)
1. 概念
拦截器通常与依赖注入框架或AOP框架一起使用,用于在方法调用前后插入额外的逻辑。
2. 作用
方法拦截:
通过实现拦截接口(如
IInterceptor
),可以在目标方法执行前后添加自定义行为。属性拦截:
拦截属性的get/set访问器,用于实现自动属性验证、日志记录等。
3. 应用场景
事务管理:在业务方法执行前后,通过拦截器来开启和提交/回滚数据库事务。
缓存:通过拦截器实现方法结果的缓存,减少数据库或服务调用次数,提高性能。
日志记录:在方法调用前后记录详细信息,包括方法名称、参数、返回值和执行时间。