图像我有一个用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/