C# 如果线程正在更改,则缓存控制器操作
如果网站的本地化是以这样一种方式完成的,即在mvc控制器中的每个请求上,我读取当前线程,并在该信息上加载部分视图,则会导致每种语言都有不同的部分视图,并且使用资源字符串对非部分视图中的字符串进行本地化 控制器使用数据注释设置本地化自定义属性C# 如果线程正在更改,则缓存控制器操作,c#,.net,asp.net-mvc,C#,.net,Asp.net Mvc,如果网站的本地化是以这样一种方式完成的,即在mvc控制器中的每个请求上,我读取当前线程,并在该信息上加载部分视图,则会导致每种语言都有不同的部分视图,并且使用资源字符串对非部分视图中的字符串进行本地化 控制器使用数据注释设置本地化自定义属性 [Localize] public class HomeController : Controller { public ActionResult Index() { string partialView = string.E
[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();
}
}
我的问题是:我如何缓存这个索引操作
有7种不同的语言吗
更新:
例如,如果我使用
[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);
}
现在,outputcache正在根据用户当前的ui区域性缓存视图
若在控制器中有多个VaryByCustom属性,则需要使用传统逻辑增强该方法
参考:您可以通过自定义参数进行缓存
[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);
}
现在,outputcache正在根据用户当前的ui区域性缓存视图
若在控制器中有多个VaryByCustom属性,则需要使用传统逻辑增强该方法
参考:在OutputCache属性中使用VaryByCustom属性
此外,您还可以在Global.asax.cs文件中覆盖GetVaryByCustomStringttpContext上下文、HttpApplication类中的字符串custom,并添加将返回当前区域性的逻辑在OutputCache属性中使用VaryByCustom属性
此外,您还可以在Global.asax.cs文件中覆盖GetVaryCustomsStringttpContext上下文、HttpApplication类中的字符串custom,并添加将返回当前区域性的逻辑否则如何缓存?否则如何缓存?