Global.asax与Owin MiddleWare:设置线程文化

时间:2016-12-02 10:48:17

标签: asp.net asp.net-web-api2 owin global-asax .net-4.6

我有一个混合的asp.net解决方案,同时包含Webforms和WebAPI 2(通过owin托管)。我需要确保所有请求都在正确的文化中处理。在介绍WebAPI之前,我们在Global.asax文件中包含以下代码:

public void Application_AuthenticateRequest(object sender, EventArgs e)
{
   Thread.CurrentThread.CurrentCulture = GetCulture();
   Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture
}

我们现在介绍了WebAPI,但它并没有使用Global.asax中的文化集。调试之后,我们发现,由于我们使用app.UseCookieAuthentication(),因此owin管道在AuthenticateRequest之前执行(因此在我们设置文化之前)。

所以我们将文化的设置移到了Owin MiddelWare

public async override Task Invoke(IOwinContext next)
{
   Thread.CurrentThread.CurrentCulture = GetCulture();
   Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture
}

这对我们的WebAPI调用非常有效,但现在我们常规的Webforms请求没有获取MiddleWare中的文化集(即使执行了MiddleWare)。

在Owin MiddleWare中设置之后,有人可以解释为什么de Webforms生命周期中的文化会恢复为默认值吗?

我调查的事情:

  • ManagedThreadIds在中间件和global.asax
  • 中是相同的

0 个答案:

没有答案