OutputCache属性的服务器缓存错误?

时间:2011-10-19 07:53:16

标签: asp.net asp.net-mvc caching outputcache

我是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”段,而不是我的设置。 怎么了?

1 个答案:

答案 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