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