2017-03-03 172 views
22

阅读了关于asp.net核心middlware之后,我很困惑我应该何时使用过滤器以及何时应该使用中间件,因为它们似乎可以实现相同的目标。 什么时候应该使用中间件代替配件?asp.net核心中间件vs过滤器

+1

本文档针对的是具体问题。 https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/filters#using-middleware-in-the-filter-pipeline – Nkosi

回答

16

在频道9有一个关于此的视频:ASP.NET Monsters #91: Middleware vs. Filters。总结视频:

请求的执行开始,我们有一个中间件和另一个middlerware,把它想象成“娃娃里面的俄罗斯娃娃”,最终路由中间件踢进去然后请求进入MVC管道。因此如果你不需要MVC的上下文(假设你关心流程和执行,比如响应头部的一些预路由机制等),那么使用中间件
但是,如果您需要MVC的上下文,并且您想针对操作进行操作,请使用过滤器

18

中间件在ASP.NET Core级别上运行,并且可以处理进入应用程序的每个请求。

另一方面,MVC过滤器仅适用于访问MVC的请求。

因此,例如,如果我想强制所有请求都必须通过HTTPS完成,那么我将不得不为此使用中间件。如果我制作了MVC过滤器,用户仍然可以请求通过HTTP的静态文件。

但是另一方面,在MVC控制器中记录请求持续时间的东西可能绝对是一个动作过滤器。