OutputCache属性和没有参数的VaryByCustom

时间:2014-12-02 16:10:12

标签: asp.net-mvc outputcache

我尝试使用OutputCache属性来缓存页面,具体取决于用户选择的语言。

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

当我们在页面上并且我们改变语言时它很好用,很酷!

但问题是:当用户第一次呼叫该页面时,没有" lang"参数。因此,缓存将在没有参数的情况下创建,如果我们在之后更改语言,它将不会被替换。

如果没有参数,我该如何管理这种情况?

任何帮助将不胜感激,谢谢!

1 个答案:

答案 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实现它。