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

本文关键字:HttpContext Cache 什么 区别 Current Response | 更新日期: 2023-09-27 17:57:00

想知道 - HttpContext.Response.CacheHttpContext.Current.Cache对象有什么区别? 和 MVC Web 应用程序中应该使用什么 Asp.net?

我为什么要问这个问题?

因为,我有自己的[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();
}

所以,我的问题是..

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

为什么这两种缓存机制的作用不同?这两者有什么区别?

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

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

HttpContext.Current.Cache是一个

提供任何类型的可序列化对象的缓存的类。它本身就相当于HttpRuntime.Cache更加浑浊你的水。

我们通常使用HttpContext.Current.Cache来缓存数据库服务器中的数据。这样就不必不断地向数据库询问变化很小的数据。这完全是服务器端的,不会影响客户端。

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