【发布时间】:2016-04-08 07:49:51
【问题描述】:
我前段时间在教程的帮助下创建了当前解决方案。当时它看起来是一个最好的解决方案。 我通过将应用程序事件侦听器 AcquireRequestState 添加到 global.asax 中来创建解决方案。在这里,我通过简单的条件检查了是否有 Session 正在运行。 如果有的话,我根据它进行调整。 (见下面的代码)
protected void Application_AcquireRequestState(object sender, EventArgs e)
{
HttpContext context = HttpContext.Current;
if (context != null && context.Session != null && Session[sessionNameCulture] != null)
{
string culture = Session[sessionNameCulture].ToString();
try
{
culture = culture.ToLower();
Thread.CurrentThread.CurrentCulture = new CultureInfo(culture); ;
Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture); ;
}
catch (Exception ex)
{
ErrorHandler.HandleError("Culture info setup failure.", ex);
}
}
}
回到我的问题。我需要,当没有现有的 Session 时,根据浏览器的设置来设置文化。 不幸的是,该事件被称为大约。三次,在其中一次通话期间:
if(Session[sessionNameCulture] == null)
它以异常结束。 我找到了一个替代解决方案,其中包括将逻辑移动到 BaseController 中,在那里我可以捕获 Page_load 事件或使用类似 this 的东西。
在我开始重做整个项目之前,我想确保没有办法通过捕获应用程序事件来解决这个问题。我想到了类似的东西:
protected void Application_AcquireRequestState(object sender, EventArgs e) {
HttpContext context = HttpContext.Current; if(Session[sessionNameCulture] == null)
Session[SessionNameCulture] = new System.Globalization.CultureInfo(Request.UserLanguages[0]);
if (context != null && context.Session != null && Session[sessionNameCulture] != null)
{
... }
另外,这可能是一个问题,这应该适用于未登录的用户。
【问题讨论】:
标签: asp.net asp.net-mvc session localization