我只是在 ASP.NET MVC 3 的 RC 版中测试输出缓存。
不知何故,它似乎没有遵循 VaryByParam 属性(或者说,我不确定自己到底是怎么回事):
public ActionResult View(UserViewCommand command) {
在这里,UserViewCommand有一个名为slug的属性,用于从数据库中查找用户。
这是我的OutputCache声明:
[HttpGet, OutputCache(Duration = 2000, VaryByParam = "None")]
然而,当我尝试使用不同的“slug”值(通过操作URL)来访问Action方法时,它不会提供错误的数据(这是我故意设计的),而是调用了Action方法。
例如(按调用顺序):
/user/view/abc -> 调用slug = abc的Action方法 /user/view/abc -> Action方法没有被调用 /user/view/xyz -> 再次调用slug = xyz的Action方法!难道它不应该因为VaryByParam = none而不从缓存中出来吗?
此外,在这种情况下,OutputCaching的推荐方式是什么?(如上所示的例子)
None
只适用于 QueryString 值 - 整个 VaryByParam 选项只对 QueryStringValues 生效。我只是以你的 slug 作为例子 :) - Buildstarted