Arv*_*and 65 asp.net-mvc asp.net-core
在阅读了asp.net核心middlware后,我很困惑何时应该使用过滤器,何时应该使用中间件,因为它们似乎达到了相同的目标.应该何时使用中间件而不是装配件?
Arv*_*and 60
在第9频道有一个关于这个的视频: ASP.NET Monsters#91:Middleware vs. Filters.总结视频:
请求的执行开始,我们有一个中间件,另一个middlerware,把它想象成"玩偶里面的俄罗斯娃娃",最终路由中间件开始,然后请求进入MVC管道.
因此,如果您不需要MVC的上下文(假设您关注流和执行,比如响应头部一些预路由机制等),那么使用中间件.
但是,如果您需要MVC的上下文并且您想要针对操作进行操作,那么请使用过滤器.
juu*_*nas 47
中间件在ASP.NET Core级别上运行,可以对应用程序中的每个请求执行操作.
另一方面,MVC过滤器仅针对来自MVC的请求运行.
因此,例如,如果我想强制所有请求必须通过HTTPS完成,我将不得不使用中间件.如果我做了一个MVC过滤器,那么用户仍然可以通过HTTP请求例如静态文件.
但另一方面,在MVC控制器中记录请求持续时间的东西绝对可以是动作过滤器.
Din*_*dan 22
过滤器管道在很多方面与中间件管道相似,但它们也有一些差异,在决定使用哪种方法时应考虑这些差异。
有什么相似之处:
有什么区别:
EndpointMiddlewareAPI 控制器或 Razor 页面并执行操作的请求运行。ModelState或IActionResults)。与过滤器相比,中间件的工作级别较低,并且独立于 MVC 和 Razor Pages,因此它不能使用任何这些相关组件。因此,当试图弄清楚应该使用什么:过滤器或中间件时,答案应该来自上面的比较。作为一名 TL;DR:
HttpContext,因此可以应用在更广泛的领域。另外我们应该意识到我们需要实现的功能没有 MVC 特定的要求Maj*_*vin 14
的执行middleware发生在 MVC 上下文在管道中可用之前。也就是说,例如,在 ActionFilter 的情况下,middleware无权访问ActionExecutingContext或ActionExecutedContext。您有权访问的是HttpContext,它将允许您对请求和响应执行操作。由于模型绑定尚未发生,因此使用中间件不适合运行验证功能或修改值。Middleware无论调用哪个控制器或操作,也将在每个请求上运行。
另一方面,filters除非您在启动时全局注册过滤器,否则只会在指定的操作和控制器上运行。由于您可以完全访问上下文,因此您还可以访问控制器和操作本身。
来源和示例:dotnetcultist.com
| 归档时间: |
|
| 查看次数: |
16192 次 |
| 最近记录: |