Кэш на основе параметра URL в Asp.net MVC - PullRequest
3 голосов
/ 20 мая 2011

Я определил маршрутную культуру / Контроллер / действие / идентификатор ... Мой контроллер содержит следующее действие ..

 [OutputCache(Duration=60*10)]
        public ActionResult Index()
        {*/do magic here/*}

Возможно ли кэшировать содержимое на основе культуры?

1 Ответ

4 голосов
/ 25 мая 2011

Полное руководство по локализации представляет пример того, как этого добиться с помощью параметра VaryByCustom.В global.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);
}
...