C# ASP.NET MVC 2缓存问题

C# ASP.NET MVC 2缓存问题,c#,asp.net-mvc,caching,C#,Asp.net Mvc,Caching,我正在编写一个应用程序,遇到了无法解决的缓存问题 我有一个默认的主控制器,用于检查用户是否经过身份验证。 如果不是,则显示登录视图,否则客户端将重定向到另一个页面 在登录视图中,还向用户发送了一个检查cookie,以检查其浏览器是否支持cookie 当我在发送带有凭据的表单之前删除cookie时,Home controller中的Home(Post方法)会显示一条消息,说明必须使用一个按钮启用cookie,该按钮 应使用登录框()刷新页面 此按钮链接到js刷新功能: var sURL = une

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

我有一个默认的主控制器,用于检查用户是否经过身份验证。 如果不是,则显示登录视图,否则客户端将重定向到另一个页面

在登录视图中,还向用户发送了一个检查cookie,以检查其浏览器是否支持cookie

当我在发送带有凭据的表单之前删除cookie时,Home controller中的Home(Post方法)会显示一条消息,说明必须使用一个按钮启用cookie,该按钮 应使用登录框()刷新页面

此按钮链接到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);
    }
}
问题是,如果我立即单击按钮刷新登录页面,浏览器就会使用其缓存读取它。但是,当我在几秒钟后执行此操作时,查询将被发送到服务器。 这是错误的,因为登录页还应该再次创建一个检查cookie

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


怎么了?谢谢您的帮助。

我说您在VisualStudio中运行这个来测试这个,对吗


据我所知,您无法在VisualStudio开发服务器中启用缓存之类的功能。这是您将在Web服务器上启用的功能,我想在您的情况下,它将是IIS。

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

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

您正在哪个浏览器上测试?还是所有浏览器都遇到了同样的问题?这是在firefox下测试的,也就是说,可能是采用sam方式。。但稍后会检查。是的,我正在VisualStudio中运行应用程序来测试它。我想做的就是永久禁用缓存,这样WebBrowser每次都可以从服务器加载页面,而不是从缓存加载页面。请至少从3个浏览器进行测试,因为这可能与浏览器相关。