2014-12-02 3 views
0

Я пытаюсь использовать атрибут OutputCache для кэширования страниц в зависимости от выбранного пользователем языка.Атрибут OutputCache и VaryByCustom без параметра

[OutputCache(Duration = 86400, Location = OutputCacheLocation.Client, VaryByParam = "", VaryByCustom = "lang")] 
public ActionResult MyActionMethod() 
{ 
    ... 
} 

Он работает отлично, когда мы находимся на странице, и мы меняем язык, круто!

Но дело в том, что, когда пользователь вызывает страницу в первый раз, нет параметра «lang». Таким образом, кеш будет создан без параметров, и он не будет заменен, если мы изменим язык после.

Как я могу управлять этим случаем, когда нет параметра?

Любая помощь будет оценена, спасибо!

ответ

0

Вы говорите, что нет параметра «lang», вы имеете в виду, что нет «lang» обычая?

В global.asax вы должны иметь что-то вроде этого:

public override string GetVaryByCustomString(HttpContext context, string custom) 
{ 
    if (custom == "lang") 
    { 
     string lang = null; 

     if (Request.UserLanguages != null && Request.UserLanguages.Length > 0) 
     { 
      lang = Request.UserLanguages.First().Split(new char[] { ';' }).First(); 
     } 
     else 
     { 
      // Default 
      lang = "en-US"; 
     } 

     return string.Format("lang={0}", lang.ToLower()); 
    } 

    return base.GetVaryByCustomString(context, custom); 
} 

Тогда это будет иметь значение «EN-US» по умолчанию, и в противном случае получить его из браузера в этом случае, или реализовать его с помощью печенье.