我有mvc4应用程序,有两种语言版本。
现在我有缓存问题,我尝试使用输出缓存,如
[OutputCache(Duration = 3600, VaryByHeader="Accept-Language")]
public ActionResult Home() {...}
但这没有解决任何问题,页面被缓存,当我更改语言时没有任何反应,之前缓存的页面仍然保留,直到缓存过期。我不确定此VaryByHeader="Accept-Language
是否符合我的网页本地化设置。
当用户点击语言标志时,一些整数值(表示当前语言)存储在cookie中,并调用helper来读取cookie并使用Thread.CurrentThread.CurrentUICulture = ...
设置相应的语言
所以如何根据选定的语言缓存页面,如果它有任何值只有两种语言。
答案 0 :(得分:1)
您需要为该语言的OutputCache添加自定义参数才能使其正常工作。
查看this blog post,该工作可以很好地解释流程,特别是OutputCache and Localization
部分。
博客文章虽然面向MVC2,但它也应该适用于MVC4。
答案 1 :(得分:0)
覆盖GetVaryByCustomString
中的global.asax.cs
:
public override string GetVaryByCustomString(HttpContext context, string value)
{
if (value.Equals("lang"))
{
return Thread.CurrentThread.CurrentUICulture.Name;
}
return base.GetVaryByCustomString(context,value);
}
现在将您的OutputCache
写在Action
上,如下面的代码:
[OutputCache(Duration=3600,VaryByParam="none", VaryByCustom="lang")]
public ActionResult Index()
{
// My Codes .... ;)
return View();
}
注意:强> 在我的情况下,我已经在自定义
ControllerFactory
课程中编写了设置语言代码,并且 在 {{1方法(在之后触发)并且此问题在缓存中导致失败基于Action中用户选择的语言。因此,我将设置语言代码移至GetVaryByCustomString
文件中的Application_BeginRequest
方法,现在可以正常工作。
我根据@DimitryKhaykin在答案中提到的link写了这个答案,在答案中写了答案。