在我的应用程序中,我会记住用户在会话中的语言选择。 问题是如果我使用输出缓存,那么更改语言功能将不起作用,因为它根据Session [“lang”]值从数据库检索时缓存结果。
那么如果我有另一种方法来使用缓存功能呢?或者我怎样才能减少响应时间?
答案 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
中不可用