gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 19:23:38 25 4
gpt4 key购买 nike

我不确定这是 ASP.NET MVC 特定的东西还是一般的 ASP.NET,但这就是正在发生的事情。我有一个 Action 过滤器,它通过使用响应过滤器来删除空格:

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 属性结合使用时,我对“ donut 洞缓存”的 Response.WriteSubstitution 调用不起作用。页面第一次和第二次加载传递给 WriteSubstitution 的回调被调用,之后它们不再被调用,直到输出缓存过期。我注意到这一点不仅是这个特定的过滤器,还有 Response.Filter 上使用的任何过滤器......我错过了什么吗?

我也忘了提到我已经尝试过不使用 MVC 操作过滤器属性,方法是附加到 global.asax 中的 PostReleaseRequestState 事件并在那里设置 Response.Filter 值......但仍然没有运气。

最佳答案

这个KB article可能会提供一些洞察这个问题的根本原因。虽然过滤器在 IIS6 中“中断”缓存,但它会在 IIS 7 中引发错误。这似乎充其量只是设计/测试时的改进。

更新

这是 MS Dev Support 对此问题的官方“答案”。

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

回答:
“是的,你的问题很明确,官方声称不支持。因为缓存后替换会将某些替换 block 组合到响应字节中,而响应过滤期望过滤响应的原始字节(未修改) . 所以之前组合的替换 block 不能再保留了。

到目前为止,微软还没有替代方案。”

关于asp.net-mvc - ASP.NET MVC 响应过滤器 + OutputCache 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1640909/

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