我尝试使用OutputCache属性来缓存页面,具体取决于用户选择的语言。
[OutputCache(Duration = 86400, Location = OutputCacheLocation.Client, VaryByParam = "", VaryByCustom = "lang")]
public ActionResult MyActionMethod()
{
...
}
当我们在页面上并且我们改变语言时它很好用,很酷!
但问题是:当用户第一次呼叫该页面时,没有" lang"参数。因此,缓存将在没有参数的情况下创建,如果我们在之后更改语言,它将不会被替换。
如果没有参数,我该如何管理这种情况?
任何帮助将不胜感激,谢谢!
答案 0 :(得分: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"作为默认值,否则在这种情况下从浏览器获取,或使用cookie实现它。