C# 动态设置区域性信息

C# 动态设置区域性信息,c#,asp.net,C#,Asp.net,我正在asp.net/c#中构建一个应用程序。对于我的应用程序中的日期,我使用全局变量进行amm,这些全局变量提供给定数据库中的日期格式 因此,如果我的DateFormat是英式的,我会使用: Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB"); 如果是我们,我使用: Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); 因此,我的日期是用这种方

我正在asp.net/c#中构建一个应用程序。对于我的应用程序中的日期,我使用全局变量进行amm,这些全局变量提供给定数据库中的日期格式

因此,如果我的
DateFormat
是英式的,我会使用:

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB");
如果是我们,我使用:

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
因此,我的日期是用这种方法验证和比较的。我的问题是,;我应该只为整个应用程序检查一次格式,还是必须检查每个页面的格式,因为我知道每个新线程
CultureInfo
都会重置


您能建议正确的操作方法吗。

您只需为会话设置一次即可


这需要为每个请求执行。您可以编写一个HttpModule,为每个请求设置当前线程区域性

**每个请求都是一个新线程

编辑:添加了示例

让我们创建一个HttpModule,如下所示,并设置区域性

public class CultureModule:IHttpModule
{
    public void Dispose()
    {          
    }
    public void Init(HttpApplication context)
    {
        context.PostAuthenticateRequest += new EventHandler(context_PostAuthenticateRequest);           
    }
    void context_PostAuthenticateRequest(object sender, EventArgs e)
    {
        var requestUri = HttpContext.Current.Request.Url.AbsoluteUri;
        /// Your logic to get the culture.
        /// I am reading from uri for a region
        CultureInfo currentCulture;
        if (requestUri.Contains("cs"))
            currentCulture = new System.Globalization.CultureInfo("cs-CZ");
        else if (requestUri.Contains("fr"))
            currentCulture = new System.Globalization.CultureInfo("fr-FR");
        else
            currentCulture = new System.Globalization.CultureInfo("en-US");

        System.Threading.Thread.CurrentThread.CurrentCulture = currentCulture;
    }

}
在web.config中注册模块,(在system.web下注册经典模式,在system.webserver下注册集成模式

<system.web>
......
<httpModules>
  <add name="CultureModule" type="MvcApplication2.HttpModules.CultureModule,MvcApplication2"/>
</httpModules>
</system.web>
<system.webServer>
.....
<modules runAllManagedModulesForAllRequests="true">
  <add name="CultureModule" type="MvcApplication2.HttpModules.CultureModule,MvcApplication2"/>
</modules>

......
-文化将是“我们”

  • -文化将是“cs CZ”

  • -文化将是“fr”


  • ***仅举一个例子,使用您的逻辑设置区域性..

    谢谢,,,如果可能的话,您能帮我举一个例子吗?…按照您提到的那样做,我就不需要再写一遍了?谢谢,,,,,非常感谢,,,这很有帮助,,,,,我还有一个疑问是我是否应该将其包含在单独的.cs文件中,是吗???谢谢,最好每个cs文件保留一个类。我只是将它保存在一个.cs文件中,并在web.config中设置配置。但是我尝试比较的日期没有给出正确的结果,我使用的是比较验证器。知道可能会遗漏什么吗?您是否尝试基于cultureIfno比较日期?