Given
asp.net 4 与 mvc 5.2.3 和 .net 4.6.1
我想根据一些请求相关的事情(例如主机)更改 CurrentCulture 支持全球化。
一个设定文化的 Owin 中间件。
产生行为的简化版本:
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);
}
Problem:
文化未被保留 例如,Web 控制器不具有在中间件中设置的文化。
这似乎与线程文化保护问题无关。当只调用一些方法并等待它们时,文化就会被保留。
虽然 4.5.1 可以工作。 (我已经在其他项目中使用过这种方式)
当我像这样更改 httpRuntime 版本时:
<httpRuntime targetFramework="4.5.1" />
一切都像魅力一样。
我找不到任何有记录的重大变更。有什么提示吗?
我可以用一个空的新 ASP 项目来重现它
有什么建议吗?
增加项。
这个问题是not与线程上的文化保存相关,因为这工作正常!
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);
}