nun*_*unu 5 c# asp.net-mvc caching asp.net-mvc-3
想知道 - HttpContext.Response.Cache与HttpContext.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);
}
Run Code Online (Sandbox Code Playgroud)
我在我的上面使用了这个属性BaseController,比如...
[NoCache]
public class BaseController : Controller
{
}
Run Code Online (Sandbox Code Playgroud)
这很好用!
但是,在身份验证部分 - 我通过以下机制将一些信息存储在缓存中
public ActionResult Login()
{
HttpContext.Current.Cache.Insert("someKey", "someValue", null, expiredTime.Value, Cache.NoSlidingExpiration);
return view();
}
Run Code Online (Sandbox Code Playgroud)
那么,我的问题是......
我在控制器的基类中使用我的自定义属性,它负责清除缓存项,即使我仍然可以访问整个应用程序中的缓存键和值,这是由Login方法代码设置的.
为什么这两种缓存机制的行为不同?这两者有什么区别?
你能否就此提出一些想法或信息.
Llo*_*oyd 11
HttpContext.Current.Cache是一个提供任何类型的可序列化对象的缓存的类.它本身就等于让HttpRuntime.Cache你的水更加泥泞.
我们HttpContext.Current.Cache通常使用缓存来自数据库服务器的数据.这节省了不得不不断向数据库询问变化不大的数据.这完全是服务器端的,不会影响客户端.
HttpResponse.Cache允许您设置和控制随响应内容一起发送的各种缓存控制标头.这告诉客户端(以及任何中间代理)您建议使用哪种缓存.注意我说建议,因为无论客户是否尊重它都是完全随意的.