ASP.NET MVC 2缓存问题

时间:2010-09-22 06:38:09

标签: c# asp.net-mvc caching

我正在编写一个应用程序并遇到了一些我无法解决的缓存问题。

我有一个网站的默认Home控制器,用于检查用户是否经过身份验证。 如果不是,则显示LogOn View,否则客户端将被重定向到另一个页面。

与LogOn视图一起,如果他的浏览器支持cookie,还会向用户发送检查cookie以检查响应。

当我在发送带有凭据的表单之前删除cookie时,Home Controller中的Home(Post方法)显示必须使用按钮启用cookie的消息 应该使用登录框(http://localhost:1234/

刷新页面

此按钮链接到js刷新功能:

var sURL = unescape("/");

function refresh()
{
    window.location.href = sURL;
}

我已经实现了在基本控制器上设置的CacheFilter。

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

    public override void OnResultExecuted(ResultExecutedContext filterContext)
    {
        base.OnResultExecuted(filterContext);
    }
}

问题是,如果我立即单击按钮刷新LogOn页面,浏览器会使用其缓存读取它。但是当我在几秒钟后执行此操作时,查询将被发送到服务器。 这是错误的,因为LogOn页面还应该再创建一个Check cookie。

在我看来,缓存策略设置为1-2秒,此后页面将从服务器重新加载。

有什么问题?谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

我见过一些类似的行为,与IE7中的javascript有关。浏览器“帮助”意识到您最近请求了该URL,因此提供了缓存版本。如果是这种情况,解决方案是通过添加伪随机数确保URL每次都是唯一的。我用的是:

function refresh()
{
    window.location.href = sURL + "?rnd="+ Math.random();
}

答案 1 :(得分:0)

我是否正确地说你在Visual Studio中运行它来测试它?

据我所知,您无法在Visual Studio开发服务器中启用缓存等功能。这是您将在您的网络服务器上启用的内容,我想这将是您的IIS。