如何在Web API 2中设置与async / await兼容的文化?

时间:2017-01-30 14:42:06

标签: async-await asp.net-web-api2 culture synchronizationcontext http-accept-language

我有一个REST服务,可以生成包含货币和日期的字符串消息,因此我需要设置正确的文化。消息是在异步操作之间运行的不同步骤中生成的。

如果在Web.config中配置了此功能,Web API将设置Accept-Language标头中的文化:

<globalization enableClientBasedCulture="true" uiCulture="auto" culture="auto" />

经过一些测试后,似乎Web API以这种方式获得的文化在异步/等待操作中是一致的。我想知道在自我主持人身上它是否会表现得一样......

但是,我想知道如何以在主机使用的SynchronizationContext中正确流动的方式任意改变请求的文化。我认为这应该是可能的,因为正如我所说,使用Accept-LanguageenableClientBasedCulture="true"标题中获取的那个似乎正确地流动。

例如,AspNetSynchronizationContext将其引导至HttpContext.Current,因此如果Thread.CurrentThread.CurrentCulture和/或Thread.CurrentThread.CurrentUICulture被操纵,其文化可能会在await之后发生变化。所以这种方式对于async / await来说并不安全。

我正在寻找的不是culture awaiter from Stephen Toub,而是强制Web API将请求的文化更改为其他内容的方式。

我尝试过委托处理程序,更改了请求邮件中的Accept-Language,但似乎为时已晚,对Thread.CurrentThread.CurrentCulture和/或Thread.CurrentThread.CurrentUICulture没有任何影响。

有没有办法以安全的异步/等待方式执行此操作?

0 个答案:

没有答案