无法将类型为“System.Web.Caching.CachedRawResponse”的对象强制转换为“System.Web.Caching.CachedVary”。
我在对aspx页面的AJAX调用中得到了这个,并且在webland中找不到关于它的信息。 CachedRawResponse甚至不在MSDN上。有没有人知道它,或者可能指出我正确的方向?
答案 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
之外解决了错误。