特定
asp.net 4,带有mvc 5.2.3和.net 4.6.1
我想根据一些请求相关的东西(如主机)更改CurrentCulture支持全球化.
建立文化的Owin-Middleware.
产生行为的简化版本:
public override async Task Invoke(IOwinContext context)
{
var culture = new CultureInfo("es-ES");
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = culture;
CultureInfo.CurrentCulture = culture;
CultureInfo.CurrentUICulture = culture;
await Next.Invoke(context);
}
Run Code Online (Sandbox Code Playgroud)
问题:
文化没有被保留所以例如Web控制器没有中间件中设置的文化.
这似乎与线程culturepreserve问题无关.正如调用一些方法并等待它们一样,文化得以保留.
虽然4.5.1有效.(我已经在其他项目中使用过这种方式)当我更改httpRuntime版本时:
<httpRuntime targetFramework="4.5.1" />
Run Code Online (Sandbox Code Playgroud)
一切都像一个魅力.
我找不到任何记录在案的突破性变化.任何提示?我可以用一个空的新ASP项目重现它任何建议?
增加项.
这个问题是不是与文化保护的线程中能正常工作!
CultureInfo.CurrentCulture = new CultureInfo("en-GB");
await Foo();
Debug.WriteLine(Thread.CurrentThread.CurrentCulture);// Works is en-gb
}
private Task Foo()
{
Debug.WriteLine(Thread.CurrentThread.CurrentCulture);// Works is en-gb
return Task.FromResult(true);
}
Run Code Online (Sandbox Code Playgroud)