Невозможно наложить объект типа "System.Web.Caching.CachedRawResponse" на тип "System.Web.Caching.CachedVary".
Я получаю это на вызов AJAX на странице aspx и не могу найти никакой информации об этом в веб-сайте. CachedRawResponse даже не на MSDN. Кто-нибудь знает что-нибудь об этом или может указать мне в правильном направлении?
У нас недавно была та же проблема, и оказалось (в нашем случае), что модуль кэша вывода страницы довольно чувствителен к тому, как вы устанавливаете свои свойства 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
разрешило ошибку.