我是MVC初学者,今天我遇到了一个奇怪的问题:我想使用OutputCache在一个action.code上启用缓存,如下所示:
[OutputCache(Duration=86400,VaryByParam="none")]
public ActionResult Index(string id)
{
ViewBag.Message = "Welcome to ASP.NET MVC!";
ViewBag.ID = id;
return View();
}
请注意,“VaryByParam”属性为“none”,是的,我希望服务器只为该操作保留一个缓存,无论传递的是什么。 路由代码是这样的:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
然后我打开探索,结果不是我想要的,例如我输入:“http:// localhost:27654 / home / index / 121212”,页面出来并显示id“121212”。但是当我改为“http:// localhost:27654 / home / index / 12”时,我看到页面被更改了,显示了ID“12”。
但是如果我刷新页面(para“id”没有改变),页面中显示的日期时间没有改变,暗示asp.net保持缓存VaryBy为“ID”段,而不是我的设置。 怎么了?
答案 0 :(得分:1)
是。这是因为您通过路由中预定义的参数创建另一个页面示例。
[OutputCache(Duration=86400,VaryByParam="none")]
public ActionResult Index(int id, string some)
{
ViewBag.Message = "Welcome to ASP.NET MVC!";
ViewBag.ID = id;
ViewBag.Some = some;
return View();
}
路由参数不能被视为OutputCache的参数。在我的示例中,string some
不是路由的一部分,因此如果您将尝试该示例,则如果您创建参数some
另请阅读此主题:OutputCache Bug with VaryByParam="None" with MVC RC refresh