控制器上的 OutputCache 属性
OutputCache attribute on a controller
我有一个 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
}
}
然后我有一个将 "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
方法的查询字符串,例如/learning/articles?name=abc
将缓存 /learning/articles/
,除非您定义了 VaryByParam="name"
(或 *
而不是 name
)。
我有一个 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
}
}
然后我有一个将 "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
方法的查询字符串,例如/learning/articles?name=abc
将缓存 /learning/articles/
,除非您定义了 VaryByParam="name"
(或 *
而不是 name
)。