gpt4 book ai didi

c# - 如果线程正在更改,则缓存 Controller 操作

转载 作者:太空宇宙 更新时间:2023-11-03 21:04:00 25 4
gpt4 key购买 nike

如果网站的本地化以这样的方式完成,即在 mvc Controller 中我读取当前线程的每个请求,并根据该信息加载部分 View (因为每种语言都有不同的部分 View )并且非部分 View 中的字符串被本地化使用资源字符串。

Controller 使用数据注释来设置 Localize 自定义属性

[Localize]
public class HomeController : Controller
{
public ActionResult Index()
{
string partialView = string.Empty;
switch (Thread.CurrentThread.CurrentCulture.ToString())
{
case "en-US":
partialView = "english";
....
}
ViewBag.PartialViewName = partialView;
return View();
}
}

my question is: how can I cache this Index action knowing that there is 7 different languages?

更新:例如,如果我使用

[OutputCache(Duration = 300)]
public ActionResult Index()
{}

那我就失去了切换语言的能力。

最佳答案

你可以通过自定义参数缓存

 [OutputCache(Duration = 3600, VaryByCustom = "CurCulture")]

在您的项目 global.asax.cs 中添加以下内容:

public override string GetVaryByCustomString(HttpContext context, string arg) 
{
if (arg.Equals("CurCulture"))
{
var culture = Thread.CurrentThread.CurrentUICulture;
return culture;
}

return base.GetVaryByCustomString(context, arg);
}

现在您的输出缓存正在根据用户当前的用户界面文化缓存您的 View 。

如果您的 Controller 有多个 VaryByCustom 属性,则需要使用附加逻辑增强该方法。

引用: https://msdn.microsoft.com/en-us/library/5ecf4420.aspx

关于c# - 如果线程正在更改,则缓存 Controller 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42473146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com