我在一个带有Owin的asp.net WebApi2解决方案中使用HangFire 1.6。
服务器已设置为一种文化(da-DK)- 我无法更改此设置。我的应用程序必须使用另一种文化(en-US)来正确解析接收到的文本数据。基本上,我只想让解决方案中的所有内容都使用这种其他文化,并且从不使用服务器上的文化。
在我的web.config文件中,我有:
<system.web>
<httpRuntime targetFramework="4.6.1" />
<globalization enableClientBasedCulture="false" culture="en-US" uiCulture="en-US"/>
</system.web>
在我的Startup
Configuration
方法中,我有以下内容
CultureInfo.DefaultThreadCurrentCulture = CultureInfo.CurrentCulture;
CultureInfo.DefaultThreadCurrentUICulture = CultureInfo.CurrentUICulture;
因为有异步方法,我希望所有启动的线程都能共享指定在web.config中的相同的文化。我还有一些在HangFire中运行的定期作业。我的问题是,无论我做什么,这些重复的作业都只会使用服务器文化(da-DK)作为当前文化(当前UI文化似乎会根据我的操作而变化:
![HangFireDashboard](https://istack.dev59.com/5i10Y.webp)
跟进(2017-11-21):
事实证明这与HangFire无关。显然,在运行"Startup.Configuration"时,CultureInfo.CurrentCulture没有设置为web.config中提供的值,因此CultureInfo.DefaultThreadCurrentCulture在此处设置为错误的值。一旦控制器执行,这些值就会被设置为web.config中的任何值。目前,我已决定在Startup类中硬编码文化,以确保在执行任何Hangfire重复作业之前已将其设置为DefaultThreadCurrentCulture。