Owin CultureInfo和AspNetSynchronizationContext

Hog*_*eed 5 c# asp.net-mvc async-await asp.net-web-api owin

使用Mvc(5.2.3)和WebApi(2.2)的网络应用程序.现在我的应用程序是由owin Startup类(Global.asax已被删除)构建并初始化的,其中安装了Microsoft.Owin.Host.SystemWeb包.

以前,在Global.asax时代,我通过使用cookie或AcceptLanguage头文化并设置Thread.CurrentThread.CurrentCulture = new CultureInfo(langSelectedValue)来设置当前的请求文化,即使对于CurrentUiCulture也是如此.

现在,由于我的Global.asax已经过去了,在S​​tartup.cs中保留了设置,模仿以前的文化设置的代码是

app.Use(async (env, next) => {
var langCookie = env.Request.Cookies["cultureName"];
if (langCookie != null && GlobalizationHelper.IsValidCultureCode(langCookie))
{
    Thread.CurrentThread.CurrentCulture = new CultureInfo(langCookie);
    Thread.CurrentThread.CurrentUICulture = new CultureInfo(langCookie);
}
await next();
})
Run Code Online (Sandbox Code Playgroud)

问题很明显,所有异步请求都会丢失线程文化.我试过很多解决方案:

  1. owin全球化模块,但它不适合我,我不想改变我的路由,这是基于属性...
  2. 用于保存和应用文化的synchronizationcontext,但即使我使用AspNetSynchronizationContext设置自己的SynchronizationContext,也会使用webapi/mvc堆栈
  3. WithCulture()扩展方法与定制的文化Awaiter,但没有做任何事情

我感谢任何建议应用CultureInfo并将其保存在Owin异步应用程序中.

提前致谢