控制器上的输出缓存属性
本文关键字:缓存 属性 输出 控制器 | 更新日期: 2023-09-27 18:35:11
我有一个 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
}
}
然后我有一个将"名称"映射到URL的RouteConfig,如下所示:
routes.MapRoute(
name: "Articles",
url: "learning/articles/{name}",
defaults: new { controller = "Learning", action = "Articles" }
);
缓存似乎有效。当我在 .cshtml 文件中设置@DateTime.Now
并使用 release 时,它确实在缓存。此外,每篇文章(按名称)也会正确返回动态内容。更重要的是,如果我恢复到查询字符串(完全删除 MapRoute),它仍然可以正常工作。
谁能向我解释为什么这在没有VaryByParam
的情况下正常工作?我问是因为我担心动态操作没有正确缓存,或者当我进入生产环境时可能会开始提供不正确的内容。
{name}
参数是 URI 的一部分,因为您将其添加到路由中,并且 OutputCache 始终独立缓存每个 URI。 VaryByParam
只会影响HttpGet
方法的查询字符串,例如 除非您定义了VaryByParam="name"
(或*
而不是name
),否则/learning/articles?name=abc
会缓存/learning/articles/
)。