Ошибка кэширования сервера с атрибутом OutputCache? - PullRequest
0 голосов
/ 19 октября 2011

Я новичок в 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",the страница выходит и отображается идентификатор" 121212 ". Но когда я изменился на" http://localhost:27654/home/index/12",and, я вижу страницу был изменен, был показан идентификатор "12".

но если я обновлю страницу (параграф "id" не изменится), дата и время, показанные на странице, не изменятся, это означает, что asp.net сохранил кеш VaryBy в качестве параметра "ID", а не в моем наборе. что не так?

1 Ответ

1 голос
/ 19 октября 2011

Да. Это потому, что вы создаете еще один пример страницы по параметрам, предопределенным в маршруте.

[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 с VaryByParam = "Нет" с обновлением MVC RC

...