【问题标题】:ASP.NET MVC 2 caching problemASP.NET MVC 2 缓存问题
【发布时间】:2010-09-22 23:55:28
【问题描述】:

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

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

除了登录视图之外,还会向用户发送一个检查 cookie,以检查其浏览器是否支持 cookie。

当我在发送带有凭据的表单之前删除 cookie 时,Home 控制器中的 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 页面还应该再次创建一个 Check cookie。

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

怎么了?感谢您的帮助。

【问题讨论】:

  • 您在哪个浏览器上测试?还是所有浏览器都有同样的问题?
  • 在firefox下测试过,IE可能是sam方式..但稍后会检查它

标签: c# asp.net-mvc caching


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    据我所知,您无法在 Visual Studio 开发服务器中启用缓存等功能。这是你将在你的网络服务器上启用的东西,我猜你的情况是 IIS。

    【讨论】:

    • 是的,我正在通过在 Visual Studio 中运行应用程序来测试它。我想要做的就是永久禁用缓存,以便网络浏览器每次都从服务器加载页面,而不是从缓存中加载。
    • 从至少 3 个浏览器返回测试,因为这可能与浏览器有关。
    猜你喜欢
    • 1970-01-01
    • 2022-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多