ASP.NET MVC 1 страница Кэширование Проблема - PullRequest
2 голосов
/ 13 мая 2011

На моем сайте есть страница, на которой пользователь может видеть список всех платежей, которые он должен сделать, выбрать файл и произвести этот платеж. Проблема, с которой я сталкиваюсь, заключается в том, что если пользователь совершает платеж по файлу, а затем вводит URL-адрес страницы сетки платежей, появляется кэшированная страница, на которой по-прежнему отображается файл, который уже был оплачен, что позволяет пользователю отправить второй платеж. То, что я хотел бы сделать, это всегда проходить через контроллер, поэтому, если пользователь введет этот URL-адрес, он пересоздает модель, и этот файл больше не будет появляться. Есть ли способ включить кеширование для определенной страницы? Есть идеи как обойти это?

1 Ответ

2 голосов
/ 13 мая 2011

Вы можете создать фильтр пользовательских действий, чтобы установить правильные заголовки ответа, чтобы дать указание браузеру не кэшировать результаты страницы:

public class DisableCacheAttribute : ActionFilterAttribute
{  
    public override void OnResultExecuting(ResultExecutingContext filterContext)
    {
        var cache = filterContext.HttpContext.Response.Cache;
        cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
        cache.SetNoStore();
        cache.SetExpires(DateTime.UtcNow.AddDays(-1));
        cache.SetValidUntilExpires(false);
        cache.SetCacheability(HttpCacheability.NoCache);
    }
}

, а затем украсить действие контроллера следующим атрибутом:

[DisableCache]
public ActionResult PerformPayment()
{
   ...
}
...