C# 如果线程正在更改,则缓存控制器操作

C# 如果线程正在更改,则缓存控制器操作,c#,.net,asp.net-mvc,C#,.net,Asp.net Mvc,如果网站的本地化是以这样一种方式完成的,即在mvc控制器中的每个请求上,我读取当前线程,并在该信息上加载部分视图,则会导致每种语言都有不同的部分视图,并且使用资源字符串对非部分视图中的字符串进行本地化 控制器使用数据注释设置本地化自定义属性 [Localize] public class HomeController : Controller { public ActionResult Index() { string partialView = string.E

如果网站的本地化是以这样一种方式完成的,即在mvc控制器中的每个请求上,我读取当前线程,并在该信息上加载部分视图,则会导致每种语言都有不同的部分视图,并且使用资源字符串对非部分视图中的字符串进行本地化

控制器使用数据注释设置本地化自定义属性

[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,并添加将返回当前区域性的逻辑

否则如何缓存?否则如何缓存?