为什么RedirectToAction改变了ThreadID
本文关键字:ThreadID 改变 RedirectToAction 为什么 | 更新日期: 2023-09-27 18:19:07
我有一个web应用程序(ASP。. NET MVC 3),支持en-US、pt-BR、es-ES的本地化。
public class HomeController : Controller
{
public ActionResult Index()
{
int threadId = Thread.CurrentThread.ManagedThreadId;
string threadUICulture = Thread.CurrentThread.CurrentUICulture.ToString();
return View();
}
}
public class LanguageController : Controller
{
public ActionResult EN()
{
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
return RedirectToAction("Index", "Home");
}
public ActionResult ES()
{
Thread.CurrentThread.CurrentUICulture = new CultureInfo("es-ES");
Thread.CurrentThread.CurrentCulture = new CultureInfo("es-ES");
int threadId = Thread.CurrentThread.ManagedThreadId;
return RedirectToAction("Index", "Home");
}
public ActionResult PT()
{
Thread.CurrentThread.CurrentUICulture = new CultureInfo("pt-BR");
Thread.CurrentThread.CurrentCulture = new CultureInfo("pt-BR");
return RedirectToAction("Index", "Home");
}
}
我以culture en-US启动应用程序,使用ActionLink,我调用Language/ES将其更改为西班牙语并重定向到索引页。但是不行,索引页还是英文的…
我看到线程Id是不同的方法LanguagesController。ES和HomeController.Index.
在ASP上管理本地化的最佳方法是什么?. NET MVC应用程序?
这是因为每个请求都是从线程池中提取的线程中提供服务的。因此,当第一个请求可以在线程A上提供时,第二个请求可以在线程b上提供。您将需要在某个地方持久化有关当前区域性的信息。这可能是:会话,cookie,一些url路由参数等。请看下面的本地化指南:
我想,在你的控制器中,设置session的文化应该可以工作。
会话("文化")= new CultureInfo("es-ES");
或
HttpContext。会话("文化")= new CultureInfo("es-ES");