asp.net mvc4 VaryByParam не работает
Мой код, как показано ниже:
[HttpGet]
[OutputCache(Duration = 90, VaryByParam = "cityCode")]
public ActionResult About(string userName, string cityCode)
{
//do something...
return View();
}
- кэш работает нормально, когда я получаю доступ к URL:
http://localhost:52121/LabOne/MvcCache/About?userName=admin&cityCode=010
- но когда я получаю доступ к этому 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.