Необработанное исключение CachedRawResponse asp.net

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

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

1 ответ

У нас недавно была такая же проблема, и оказалось (в нашем случае), что модуль кэша вывода страницы довольно чувствителен к тому, как вы устанавливаете 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 решил ошибку.

Другие вопросы по тегам