HttpContext.Current.Cache和HttpContext.Response.Cache有什么区别?

7

想了解 - HttpContext.Response.CacheHttpContext.Current.Cache 对象之间的区别?在 Asp.net MVC web 应用程序中应该使用哪个?

我为什么要问这个问题?

因为我有自己的[NoCache]属性,它负责在视图重定向期间避免缓存。

例如:

public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var cache = filterContext.HttpContext.Response.Cache;
        cache.SetExpires(DateTime.Now.AddDays(-1));
        cache.SetValidUntilExpires(false);
        cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
        cache.SetCacheability(HttpCacheability.NoCache);
        cache.SetNoStore();
        base.OnActionExecuting(filterContext);
    }

我正在使用上述属性在我的BaseController中,例如..

[NoCache]
public class BaseController : Controller
{

}

这个很好用!

但在认证部分——我通过以下方式将一些信息存储在缓存中

public ActionResult Login()
{
    HttpContext.Current.Cache.Insert("someKey", "someValue", null, expiredTime.Value, Cache.NoSlidingExpiration);
    return view();
}

所以,我的问题是..

我在控制器的基类中使用了自定义属性,负责清除缓存项,尽管如此,我仍然可以在整个应用程序中访问由登录方法代码设置的缓存键和值。

为什么这两种缓存机制表现不同?它们之间有什么区别?

您能否就此提供一些想法或信息。


1
我从许多不是代码的单词中删除了“code”格式。那种高亮会使阅读变得明显更困难。 - Andrew Barber
1个回答

16

HttpContext.Current.Cache 是一个提供任何类型可序列化对象缓存的类。它本身等同于 HttpRuntime.Cache,以使事情更加混乱。

通常我们使用 HttpContext.Current.Cache 来缓存来自数据库服务器的数据。这样可以避免不断向数据库请求几乎没有变化的数据。这完全是在服务器端进行的,不影响客户端。

HttpResponse.Cache 允许您设置和控制与响应内容一起发送的各种缓存控制标头。这告诉客户端(以及任何中间代理)您建议的缓存类型。请注意我说的是建议,因为客户端是否遵守它完全是任意的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接