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

asp.net-mvc – ASP.NET MVC响应过滤器OutputCache属性

发布时间:2020-12-16 06:56:37 所属栏目:asp.Net 来源:网络整理
导读:我不确定这是一个ASP.NET MVC特定的东西或一般的ASP.NET,但这是正在发生的事情.我有一个动作过滤器,通过使用响应过滤器删除空格: public class StripWhitespaceAttribute : ActionFilterAttribute{ public StripWhitespaceAttribute () { } public override
我不确定这是一个ASP.NET MVC特定的东西或一般的ASP.NET,但这是正在发生的事情.我有一个动作过滤器,通过使用响应过滤器删除空格:

public class StripWhitespaceAttribute : ActionFilterAttribute
{
    public StripWhitespaceAttribute ()
    {

    }

    public override void OnResultExecuted(ResultExecutedContext filterContext)
    {
        base.OnResultExecuted(filterContext);

        filterContext.HttpContext.Response.Filter = new WhitespaceFilter(filterContext.HttpContext.Response.Filter);
    }
}

当与OutputCache属性一起使用时,我对Response.WriteSubstitution的“donut hole caching”调用不起作用.第一次和第二次页面加载传递给WriteSubstitution的回调被调用,之后在输出缓存到期之前不再调用它们.我注意到这不仅仅是这个特殊的过滤器,而是Response.Filter上使用的任何过滤器……我错过了什么?

我也忘了提到我在没有使用MVC动作过滤器属性的情况下通过附加到global.asax中的PostReleaseRequestState事件并在那里设置Response.Filter值来尝试这个…但是仍然没有运气.

解决方法

这个 KB article可以提供一些洞察这个问题的根本原因.当IIS6中的过滤器“中断”缓存时,它会在IIS 7中引发错误.这似乎是设计/测试时间的最佳改进.

UPDATE

这是MS Dev Support在此问题上的官方“答案”.

题:
在以下情况下,ASP.NET中用于修改由另一个进程呈现的HTML的响应过滤的替代方法是:
1.其他过程无法修改
2.必须支持缓存后替换

回答:
“是的,你的问题显然是蓝天,这是官方声称不支持.因为后缓存替换会将某些替换块组合到响应字节,而响应过滤期望过滤响应的原始字节(未修改)因此,先前组合的替换块不再被保留.

到目前为止,微软还没有替代方案.“

(编辑:李大同)

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

    推荐文章
      热点阅读