Необработанное исключение CachedRawResponse asp.net - PullRequest
2 голосов
/ 27 мая 2009

Невозможно привести объект типа 'System.Web.Caching.CachedRawResponse' к типу 'System.Web.Caching.CachedVary'.

Я получаю это по AJAX-вызову на страницу aspx и не могу найти никакой информации об этом в Интернете. CachedRawResponse даже не на MSDN. Кто-нибудь знает что-нибудь об этом, или, может быть, указывает мне правильное направление?

1 Ответ

2 голосов
/ 16 сентября 2009

У нас недавно была такая же проблема, и оказалось (в нашем случае), что модуль кэша вывода страницы довольно чувствителен к тому, как вы устанавливаете свои свойства Response.Cache.VaryByXyz. Мы использовали код, подобный следующему, в нашем модуле сжатия HTTP:

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

К сожалению, это приводит к тому, что ASP.NET выбрасывает соответствие, когда страница кэшируется после вызова неподдерживаемым браузером и впоследствии запрашивается из кэша поддерживаемым браузером.

Если не задано значение VaryByXyz, CachedRawResponse будет сохранено в кеше вывода ASP.NET, но если вы установите значение VaryByXyz во время запроса, ASP.NET ожидает CachedVary в этом месте. И вместо проверки правильности типа кэшированной страницы фреймворк просто выполняет приведение, в результате чего получается InvalidCastException.

Мораль истории: всегда устанавливайте VaryByXyz последовательно, независимо от заголовков запроса или других переменных, не связанных с запросом. В нашем случае размещение VaryByHeaders за пределами if решило ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...