未处理的异常CachedRawResponse asp.net

时间:2009-05-27 17:57:20

标签: c# asp.net exception iis-6

无法将类型为“System.Web.Caching.CachedRawResponse”的对象强制转换为“System.Web.Caching.CachedVary”。

我在对aspx页面的AJAX调用中得到了这个,并且在webland中找不到关于它的信息。 CachedRawResponse甚至不在MSDN上。有没有人知道它,或者可能指出我正确的方向?

1 个答案:

答案 0 :(得分:2)

我们最近遇到了同样的问题,结果发现(在我们的例子中)页面输出缓存模块对您设置Response.Cache.VaryByXyz属性的方式非常敏感。我们在HTTP压缩模块中使用了以下代码:

if (IsBrowserSupported(userAgent))
{
    Response.Cache.VaryByHeaders["Accept-Encoding"] = true;
    ...
}

不幸的是,这会导致ASP.NET在不受支持的浏览器调用后缓存页面时抛出适合的值,然后由支持的浏览器从缓存中请求。

未设置任何VaryByXyz会导致CachedRawResponse存储在ASP.NET输出缓存中,但如果您在请求期间设置了任何VaryByXyz,则ASP.NET需要{ {1}}在该位置。而不是检查缓存页面是否是正确的类型,框架只是强制转换,导致CachedVary

故事的道德:始终一致地设置InvalidCastException,无论请求标头或其他非请求相关变量如何。在我们的示例中,将VaryByXyz置于VaryByHeaders之外解决了错误。