相关疑难解决方法(0)

ASP.NET中间件不再保留文化

特定

asp.net 4,带有mvc 5.2.3和.net 4.6.1

我想根据一些请求相关的东西(如主机)更改CurrentCulture支持全球化.

建立文化的Owin-Middleware.

产生行为的简化版本:

 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);
  }
Run Code Online (Sandbox Code Playgroud)

问题:

文化没有被保留所以例如Web控制器没有中间件中设置的文化.

这似乎与线程culturepreserve问题无关.正如调用一些方法并等待它们一样,文化得以保留.

虽然4.5.1有效.(我已经在其他项目中使用过这种方式)当我更改httpRuntime版本时:

<httpRuntime targetFramework="4.5.1" />
Run Code Online (Sandbox Code Playgroud)

一切都像一个魅力.

我找不到任何记录在案的突破性变化.任何提示?我可以用一个空的新ASP项目重现它任何建议?

增加项.

这个问题是不是与文化保护的线程中能正常工作!

       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); 
    }
Run Code Online (Sandbox Code Playgroud)

.net asp.net asp.net-mvc .net-4.6

6
推荐指数
1
解决办法
875
查看次数

标签 统计

.net ×1

.net-4.6 ×1

asp.net ×1

asp.net-mvc ×1