Кэш на основе параметра Url в Asp.net MVC
Я определил культуру маршрута/контроллер/действие/идентификатор... мой контроллер содержит следующее действие..
[OutputCache(Duration=60*10)]
public ActionResult Index()
{*/do magic here/*}
Можно ли кэшировать содержимое на основе культуры?
1 ответ:
Полное руководство по локализации представляет пример того, как достичь этого с помощью параметра
VaryByCustom
. В глобальном масштабе.asax вы бы переопределили методGetVaryByCustomString
:public override string GetVaryByCustomString(HttpContext context, string value) { if (value == "lang") { return Thread.CurrentThread.CurrentUICulture.Name; } return base.GetVaryByCustomString(context, value); }
А затем:
[OutputCache(Duration = 60 * 10, VaryByParam = "none", VaryByCustom = "lang")] public ActionResult Index() { /* do magic here */ ... }
Или если вы хотите полагаться исключительно на параметр данных маршрута культуры, вы можете сделать это:
public override string GetVaryByCustomString(HttpContext context, string value) { if (value == "lang") { var routeData = RouteTable.Routes.GetRouteData(new HttpContextWrapper(context)); var culture = (string)routeData.Values["culture"]; if (!string.IsNullOrEmpty(culture)) { return culture; } } return base.GetVaryByCustomString(context, value); }