使用ASP.Net MVC 3我有输出被使用属性缓存在控制器[OutputCache]
[OutputCache]
public controllerA(){}
我想知道是否可以通过调用另一控制器无效高速缓存数据(服务器高速缓存),用于特定的控制器或大致所有的高速缓存数据
public controllerB(){} // Calling this invalidates the cache
使用ASP.Net MVC 3我有输出被使用属性缓存在控制器[OutputCache]
[OutputCache]
public controllerA(){}
我想知道是否可以通过调用另一控制器无效高速缓存数据(服务器高速缓存),用于特定的控制器或大致所有的高速缓存数据
public controllerB(){} // Calling this invalidates the cache
你可以使用RemoveOutputCacheItem
方法。
下面是你如何使用它的一个示例:
public class HomeController : Controller
{
[OutputCache(Duration = 60, Location = OutputCacheLocation.Server)]
public ActionResult Index()
{
return Content(DateTime.Now.ToLongTimeString());
}
public ActionResult InvalidateCacheForIndexAction()
{
string path = Url.Action("index");
Response.RemoveOutputCacheItem(path);
return Content("cache invalidated, you could now go back to the index action");
}
}
index动作响应被缓存在服务器上为1分钟。 如果你打的InvalidateCacheForIndexAction
行动将到期的指数动作缓存。 目前还没有办法无效整个缓存,你应该做的每缓存动作(不控制器),因为RemoveOutputCacheItem
方法需要在服务器端脚本,它缓存的URL。
你可以通过使用自定义属性,就像这样:
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public sealed class NoCacheAttribute : ActionFilterAttribute
{
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);
}
}
然后在你的controllerb
你可以这样做:
[NoCache]
public class controllerB
{
}