gpt4 book ai didi

asp.net - 为什么 OutputCache 是 ASP.NET MVC 中的结果过滤器而不是操作过滤器?

转载 作者:行者123 更新时间:2023-12-04 14:12:56 27 4
gpt4 key购买 nike

OutputCache 属性通常作为 ASP.NET MVC 中的结果过滤器的示例给出。 This MSDN page是一处。因此,它包装了 ActionResult 对象的执行。但是那个对象不是在action方法的末尾执行的吗?我很困惑它如何允许使用缓存的响应并阻止操作本身执行,如果它只在该方法结束时包装 ActionResult 的执行。我知道缓存有效,所以显然我遗漏了一些明显的部分。

最佳答案

OutputCacheAttribute继承自 ActionFilterAttribute , 进而实现 IActionFilter , 和 IResultFilter .因此OutputCacheAttribute既是 Action 过滤器又是结果过滤器。

当你考虑它时,这是完全有道理的。缓存背后的逻辑是这样的:

  • 执行时
  • 该项目是否在缓存中?
  • 如果是:从缓存返回 (完成)
  • 如果否,继续
  • 获取结果
  • 退出时
  • 放入缓存
  • 返回结果

  • 所以第 1 部分由 IActionFilter 的实现处理。 ,如果没有立即返回结果,我们将继续执行 IResultFilter 的操作和实现处理将该结果添加到缓存中以备将来调用。

    由于 ASP.NET 是开源的,这可以在代码中得到确认。退房 OutputCacheAttribute.cs on codeplex .
  • 第 222 行是在 OnActionExecuting 期间检查 cahce 的地方(IActionFilter 的一部分)
  • 第 237 - 249 行 OnActionExecuting方法设置在 OnResultExecuted 期间被调用的回调(IResultFilter 的一部分)
  • 关于asp.net - 为什么 OutputCache 是 ASP.NET MVC 中的结果过滤器而不是操作过滤器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23943371/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com