ASP.NET MVC 1页面缓存问题

时间:2011-05-12 20:38:24

标签: asp.net-mvc caching routes browser-cache

在我的网站上有一个页面,用户可以在其中查看他们需要进行的所有付款的列表,选择文件并进行付款。我遇到的问题是,如果用户对文件进行付款,然后输入付款网格页面的URL,则会显示缓存页面,但仍显示已付款的文件,允许用户提交第二笔付款。我想要做的是总是通过控制器,所以如果用户键入此URL,他们将重新生成模型,这个文件将不再出现。有没有办法转换某个页面的缓存?关于如何解决这个问题的任何想法?

1 个答案:

答案 0 :(得分:2)

您可以创建自定义操作过滤器来设置正确的响应标头,以指示浏览器不要缓存页面结果:

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()
{
   ...
}