控制器上的OutputCache属性

时间:2016-02-17 22:56:29

标签: c# asp.net asp.net-mvc outputcache

我有一个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这是正常的吗?我问,因为我担心动态操作没有正确缓存,或者当我投入生产时可能会开始提供不正确的内容。

1 个答案:

答案 0 :(得分:1)

{name}参数是URI的一部分,因为您已将其添加到路由中,而OutputCache始终独立地缓存每个URI。 VaryByParam只会影响HttpGet方法的查询字符串,例如除非您定义/learning/articles?name=abc(或/learning/articles/而不是VaryByParam="name"),否则*会缓存name