У меня есть веб-приложение, которое получает много контента через ajax. Например, когда пользователь редактирует некоторые данные, браузер отправляет изменения, используя сообщение ajax, а затем выполняет ajax, чтобы получить свежий контент и заменить существующий div на странице этим контентом. Это работало только с MVC1, но в MVC2 я получал противоречивые результаты.
Я обнаружил, что MVC1 по умолчанию включал элемент Expires в заголовки ответа, установленные на текущее время, но в MVC2 заголовок Expires отсутствует. Это проблема некоторых браузеров (IE8), которые на самом деле используют кэшированную версию ajax get вместо свежей версии.
Чтобы решить эту проблему, я создал простой ActionFilterAttribute, который устанавливает кэш ответа на NoCache (см. Ниже), который работает, но кажется глупым украшать каждый контроллер с этим атрибутом. Есть ли глобальный способ установить это для каждого контроллера?
Это ошибка в MVC2, и она действительно должна устанавливать истечение срока действия на каждом ActionResult / view / page? Разве большинство программ MVC не имеют дело с вводом данных, когда устаревшие данные - это очень плохо?
Спасибо
Dan
public class ResponseNoCachingAttribute : ActionFilterAttribute
{
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
base.OnResultExecuted(filterContext);
filterContext.HttpContext.Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);
}
}