ASP.NET Core middleware vs filters

2019/07/19

127

如果您使用 ASP.NET Core 框架,那么您可能会面临一个选择困境,什么时候使用 middleware,什么时候使用 filters,这个困境的根源是因为有时候两者都可以达到同一个目的,而他们之间的不同可以归结为是否需要访问 MVC 上下文

ASP.NET Core Middleware

在请求管道中,Middleware 的执行发生在 MVC 上下文可用前,也就是说,Middleware 无法访问 ActionExecutingContext 或者 ActionExecutedContext,你有权访问 HttpContext,它允许你对请求和响应执行操作。由于模型绑定尚未发生,因此使用 Middleware 时,不适合运行验证函数或修改值。中间件也会在每个请求上运行,无论哪个 Controller 或 Action 被调用。

ASP.NET Core Filters

Filters 将仅仅在你指定的 Action 或 Controller 上运行,除非你把某一个 Filter 注册成全局的。由于你对上下文具有完全的访问权限,因此你可以访问 Controller 和 Action 本身。

评论