我有一个ASP.NET MVC 4控制器,如下所示:
#if !DEBUG
[OutputCache]
#endif
public class LearningController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult Articles(string name)
{
... return dynamic content here based on name
}
}
然后我有一个RouteConfig,它将“name”映射到URL,如下所示:
routes.MapRoute(
name: "Articles",
url: "learning/articles/{name}",
defaults: new { controller = "Learning", action = "Articles" }
);
缓存似乎有效。当我在.cshtml文件中设置@DateTime.Now
并使用release时,它确实是缓存。此外,每篇文章(按名称)也正确返回动态内容。更重要的是,如果我恢复查询字符串(完全删除MapRoute),它仍然都能正常工作。
有人可以向我解释为什么没有VaryByParam
这是正常的吗?我问,因为我担心动态操作没有正确缓存,或者当我投入生产时可能会开始提供不正确的内容。
答案 0 :(得分:1)
{name}
参数是URI的一部分,因为您已将其添加到路由中,而OutputCache始终独立地缓存每个URI。
VaryByParam
只会影响HttpGet
方法的查询字符串,例如除非您定义/learning/articles?name=abc
(或/learning/articles/
而不是VaryByParam="name"
),否则*
会缓存name
。