OutputCache如何添加访问计数
本文关键字:访问 添加 何添加 OutputCache | 更新日期: 2023-09-27 18:04:53
我想添加每个人请求操作的访问计数。我的动作是:
public async Task<ActionResult> Index()
{
// add visit count
VisitCount();
return View(await db.Departments.ToListAsync());
}
当我使用OutputCache缓存它时,VisitCount()
不运行!我如何用VisitCount做OutputCache
?
使用它,但不要再次运行(只运行每个输出缓存持续时间)
[VisitCoutFilter]
[OutputCache(Duration = 30,Order = 100)]
public async Task<ActionResult> Index()
{
return View(await db.Departments.ToListAsync());
}
和访问内容:
public class VisitCoutFilter: ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
//do visit
// break ponit
base.OnActionExecuting(filterContext);
}
}
问题是OutputCache
不会运行动作方法,因为它缓存了整个视图。它会从缓存中检索视图。所以,你必须问问自己,你到底想要达到什么目标。性能?如何?通过最小化到数据库的往返?
最小化数据库往返
-
可以缓存数据。如果你使用的是启用EnableObjectTracking的实体框架,那么默认情况下数据将被缓存
-
您可以使用局部视图来呈现数据并只缓存局部视图。这将利用数据缓存
最小化对服务器的请求
1。如果您希望消除到web服务器的往返,则可以在客户端上缓存视图。然而,你需要使用javascript来处理它的分析部分
[OutputCache(Duration=100, VaryByParam="none", Location=OutputCacheLocation.Client, NoStore=true)]
public ActionResult Index(){}
好的,我知道你的问题,解决方案在这里:
OutputCacheAttribute
有局限性,有一个由Paul Hiles开发的自定义属性DonutOutputCache
有助于克服限制。