图像我有一个用OutputCache属性缓存的视图,但是我仍然需要增加一个计数器来记录该页面已被查看,我该怎么办?

我考虑过要创建自己的Custom ActionFilterAttribute,并使用Action Filter Execution的执行顺序来记录此..,但我不确定它是否会起作用。

例如。

[IncrementViewCountFilter(Order=1)]
[OutputCache(Duration=60,Order=2)]
public ActionResult Index(int questionId)
{ ... }


首先,我的假设是,如果调用了OutputCache并缓存了页面,则不会运行控制器代码。

我猜的下一个问题是IncrementViewCountFilter不会知道questionId,因此它将如何知道要递增的内容(因为它是在执行主要索引代码之前执行的)。

其次,如果IncrementViewCountFilter确实知道questionId ..并且获得了很多成功,则您不希望它一直将其一直写入数据库..而是仅当它达到一定数量..然后才刷新' 输出。

有人有什么想法吗?

最佳答案

好吧,您有一些选择。

甜甜圈缓存

服务器端选项之一是“甜甜圈缓存”。甜甜圈缓存允许大部分页面被缓存,部分页面不被缓存(甜甜圈中间的孔)。甜甜圈缓存is described here,我已经成功使用了它。

基于图像的跟踪器

另一个选择是使页面上的图像实际加载记录命中的服务器端操作。这看起来像

<img src="/controller/action">


在页面上,操作serves up an empty image结尾。

客户端跟踪

最后一个选项是客户端跟踪-某些脚本在客户端运行,并使用AJAX调用服务器上的某些内容来记录匹配。 Google对其Analytics(分析)套件使用了类似的方法。如果您与跟踪机制位于同一域中...就像您的主页是:

http://www.domain.com/home/action


并且跟踪器已开启

http://www.domain.com/tracking/action


那你就好了

当您的跟踪器位于其他域时,这将变得很棘手(您需要使用JSONP或其他允许相对安全的跨站点脚本的机制来处理此问题)。

关于asp.net-mvc - OutputCache和记录唯一 View ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/356164/

10-12 07:21