加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 07:19:55 所属栏目:asp.Net 来源:网络整理
导读:OutputCache属性通常作为ASP.NET MVC中结果过滤器的示例给出. This MSDN page是一个地方.因此它包装了ActionResult对象的执行.但是,在动作方法结束时执行的对象不是吗?我很困惑它如何允许使用缓存的响应,并且如果它只在该方法结束时包含ActionResult的执行,
OutputCache属性通常作为ASP.NET MVC中结果过滤器的示例给出. This MSDN page是一个地方.因此它包装了ActionResult对象的执行.但是,在动作方法结束时执行的对象不是吗?我很困惑它如何允许使用缓存的响应,并且如果它只在该方法结束时包含ActionResult的执行,则会阻止操作本身执行.我知道缓存有效,所以显然有一些我不知道的明显部分.

解决方法

OutputCacheAttribute继承自ActionFilterAttribute,后者又实现IActionFilter和IResultFilter.因此,OutputCacheAttribute既是动作过滤器又是结果过滤器.

当你考虑它时,这是完全合理的.缓存背后的逻辑如下:

>执行时

>缓存中的项目是?
>如果是:从缓存返回(完成)
>如果否,继续

>得到结果
>退出时

>放入缓存
>返回结果

因此,第1部分由IActionFilter的实现处理,如果它不立即返回结果,我们继续执行操作并且IResultFilter的实现处理将该结果添加到缓存以供将来调用.

由于ASP.NET是开源的,这可以在代码中得到确认.查看OutputCacheAttribute.cs on codeplex.

>第222行是在OnActionExecuting期间检查cahce的地方(IActionFilter的一部分)>第237行 – 第249行OnActionExecuting方法设置一个在OnResultExecuted(IResultFilter的一部分)期间调用的回调

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读