在这种情况下如何使用outputcache?

时间:2010-11-12 02:53:20

标签: c# asp.net asp.net-mvc outputcache

在我的应用程序中,我会记住用户在会话中的语言选择。 问题是如果我使用输出缓存,那么更改语言功能将不起作用,因为它根据Session [“lang”]值从数据库检索时缓存结果。

那么如果我有另一种方法来使用缓存功能呢?或者我怎样才能减少响应时间?

2 个答案:

答案 0 :(得分:1)

输出缓存基础结构的一部分是VaryBy机制,它是一种指示ASP.NET保持同一页面的并行缓存由某些数据(如查询字符串)改变的方式。在这种情况下,VaryByCustom机制可能是最简单的实现。 Here's a short article with a good example.

首先,缓存属性:

[OutputCache(CacheProfile = "CachedPage")]
public ActionResult Index()
{
   return View();
}

缓存配置文件:

<caching>
    <outputcachesettings>             
        <outputcacheprofiles> 
            <add varybycustom="Language"
                 varybyparam="*"
                 duration="86400"
                 name="CachedPage" />
        </outputcacheprofiles> 
    </outputcachesettings> 
</caching>

最后,global.asax.cs中的自定义逻辑:

public override string GetVaryByCustomString(
    HttpContext context,
    string arg)
{
    if (arg == "Language")
    {
         return Session["lang"].ToString();
    }
    else
    {
        return base.GetVaryByCustomString(context, arg);
    }
}

现在,对于Session["lang"]返回的每个可能的唯一值,ASP.NET将保留在该参数下执行的页面的缓存副本。

答案 1 :(得分:-1)

将此值保存在Cookie中,会话在GetVaryByCustomString

中不可用