ASP.NET MVC2 и кеширование браузера - PullRequest
1 голос
/ 21 мая 2010

У меня есть веб-приложение, которое получает много контента через 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);
    }
}

1 Ответ

4 голосов
/ 21 мая 2010

Вы пытались добавить следующий атрибут в свой контроллер?

[OutputCache(Location = OutputCacheLocation.None)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...