asp.net mvc4 VaryByParam не работает

Мой код, как показано ниже:

[HttpGet]
[OutputCache(Duration = 90, VaryByParam = "cityCode")]
public ActionResult About(string userName, string cityCode)
{
     //do something...
     return View();
}
  1. кэш работает нормально, когда я получаю доступ к URL:

http://localhost:52121/LabOne/MvcCache/About?userName=admin&cityCode=010

  1. но когда я получаю доступ к этому URL-адресу маршрута, как показано ниже, кеш не работает, почему?

HTTP: // локальный: 52121 / LabOne / MvcCache / О / админ / 010

1 ответ

Решение

Я скопировал ваш код, протестировал его на своем компьютере и настроил RouteConfig следующим образом

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

        routes.MapRoute(
           name: "aboutRoute",
           url: "{controller}/{action}/{userName}/{cityCode}",
           defaults: new { controller = "Home", action = "About", userName = UrlParameter.Optional, cityCode = UrlParameter.Optional  }
       );
    }
}

И я столкнулся с той же проблемой, я объясню это:

OutputCache зависит от URL, и примеры, которые вы предоставляете, на самом деле представляют собой два разных URL, хотя они приведут к одному и тому же результату.

Поэтому попробуйте запросить URL-адрес http://localhost:52121/LabOne/MvcCache/About/admin/010 еще раз. и вы увидите, что OutputCache работает, и MVC принесет результат из кэша, потому что OutputCache был кэширован этот URL в предыдущий раз.

ОБНОВИТЬ

В соответствии с этим вопросом, используя outputcache в MVC и его принятый ответ, Caching работает с URL и не имеет отношения к MVC Routing System.

Другие вопросы по тегам