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如何添加访问计数

问题是OutputCache不会运行动作方法,因为它缓存了整个视图。它会从缓存中检索视图。所以,你必须问问自己,你到底想要达到什么目标。性能?如何?通过最小化到数据库的往返?

最小化数据库往返

  1. 可以缓存数据。如果你使用的是启用EnableObjectTracking的实体框架,那么默认情况下数据将被缓存

  2. 您可以使用局部视图来呈现数据并只缓存局部视图。这将利用数据缓存

最小化对服务器的请求

1。如果您希望消除到web服务器的往返,则可以在客户端上缓存视图。然而,你需要使用javascript来处理它的分析部分

 [OutputCache(Duration=100, VaryByParam="none", Location=OutputCacheLocation.Client, NoStore=true)]
    public ActionResult Index(){}

好的,我知道你的问题,解决方案在这里:

OutputCacheAttribute有局限性,有一个由Paul Hiles开发的自定义属性DonutOutputCache有助于克服限制。