asp.net核心中间件与过滤器


Answers:


80

在第9频道上有一个有关此视频: ASP.NET Monsters#91:中间件与过滤器。总结视频:

请求的执行开始,我们有了一个中间件和另一个中间件,就像“娃娃里面的俄罗斯娃娃”一样,最终路由中间件开始运行,然后请求进入MVC管道。 在此处输入图片说明 因此,如果您不需要MVC的上下文(例如,您担心流程和执行,例如响应标头的某些预路由机制等),则可以使用中间件
但是,如果您需要MVC的上下文并且要针对操作进行操作,则可以使用过滤器


因此,如果我有逻辑要在每个请求(例如记录)上运行,而其中只有一些与MVC相关,则可以将其放在中间件中,然后让过滤器处理程序执行可能需要的特定逻辑,然后重新扔到中间件?
Terry H

64

中间件在ASP.NET Core级别上运行,并且可以对应用程序中出现的每个单个请求进行操作。

另一方面,MVC筛选器仅针对到达MVC的请求运行。

因此,例如,如果我想强制所有请求必须通过HTTPS完成,则必须为此使用中间件。如果我做了一个MVC过滤器,用户仍然可以通过HTTP请求例如静态文件。

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


3

middlewareMVC上下文在管道中变得可用之前,执行。也就是说,例如在ActionFilter的情况下,middleware不能访问ActionExecutingContextActionExecutedContext。您真正可以访问的是HttpContext,它将使您能够对请求以及响应执行操作。由于尚未发生模型绑定,因此使用中间件不适合运行验证功能或修改值。Middleware也会在每个请求上运行,无论调用哪个控制器或动作。

另一方面,filters除非您在启动时全局注册过滤器,否则它将仅在指定的操作和控制器上运行。由于您具有对上下文的完全访问权限,因此您还可以访问控制器和操作本身。

来源和示例:dotnetcultist.com

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.