Asp.net Global.asax vs Owin中间件:设置线程区域性

Asp.net Global.asax vs Owin中间件:设置线程区域性,asp.net,asp.net-web-api2,owin,global-asax,.net-4.6,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.Cur

我有一个混合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请求没有获取中间件中的区域性集(即使中间件已经执行)

有人能解释为什么在Owin中间件中设置了is之后,de Webforms生命周期中的区域性恢复为默认值吗

我调查的事情:

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