MVC3 Razor - Истекающие страницы - PullRequest
9 голосов
/ 18 марта 2011

Мне нужно истечь срок действия моего контента, чтобы при нажатии пользователем кнопки навигации (назад) браузера выполнялось действие контроллера.Поэтому вместо добавления следующего кода к каждому действию
есть лучший способ сделать это.

HttpContext.Response.Expires = -1;
HttpContext.Response.Cache.SetNoServerCaching();
Response.Cache.SetAllowResponseInBrowserHistory(false);
Response.CacheControl = "no-cache";
Response.Cache.SetNoStore();

Ответы [ 3 ]

28 голосов
/ 18 марта 2011

Вы можете поместить эту логику в ActionFilter, что означает, что вместо добавления приведенного выше кода к каждому из ваших методов Action в вашем контроллере вы можете просто украсить метод Action с помощью пользовательского фильтра. Или, если он применяется ко всем методам Action в контроллере, вы можете применить атрибут ко всему контроллеру.

Ваш ActionFilter будет выглядеть примерно так:

public class MyExpirePageActionFilterAttribute : System.Web.Mvc.ActionFilterAttribute
    {
        public override void OnActionExecuted(System.Web.Mvc.ActionExecutedContext filterContext)
        {
            base.OnActionExecuted(filterContext);

            filterContext.HttpContext.Response.Expires = -1;
            filterContext.HttpContext.Response.Cache.SetNoServerCaching();
            filterContext.HttpContext.Response.Cache.SetAllowResponseInBrowserHistory(false);
            filterContext.HttpContext.Response.CacheControl = "no-cache";
            filterContext.HttpContext.Response.Cache.SetNoStore();

        }
    }

См. эту статью для получения дополнительной информации.

Если вы хотите это для всех действий всего приложения, вы можете применить ActionFilter ко всем действиям, используя глобальный ActionFilter, настроенный в вашем Global.asax:

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();

    GlobalFilters.Filters.Add(new MyExpirePageActionFilterAttribute());

    RegisterGlobalFilters(GlobalFilters.Filters);
    RegisterRoutes(RouteTable.Routes);
}
1 голос
/ 18 марта 2011

Вы можете написать свой собственный ActionFilter и поместить туда код.

Если вы не хотите украшать все свои методы действий этим фильтром, то вы можете зарегистрировать его как глобальный фильтр действий: http://weblogs.asp.net/gunnarpeipman/archive/2010/08/15/asp-net-mvc-3-global-action-filters.aspx

0 голосов
/ 18 марта 2011

Вы можете поместить его в Модуль HTTP .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...