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

2023-11-25

Given

asp.net 4 与 mvc 5.2.3 和 .net 4.6.1

我想根据一些请求相关的事情(例如主机)更改 CurrentCulture 支持全球化。

一个设定文化的 Owin 中间件。

产生行为的简化版本:

 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);
  }

Problem:

文化未被保留 例如,Web 控制器不具有在中间件中设置的文化。

这似乎与线程文化保护问题无关。当只调用一些方法并等待它们时,文化就会被保留。

虽然 4.5.1 可以工作。 (我已经在其他项目中使用过这种方式) 当我像这样更改 httpRuntime 版本时:

<httpRuntime targetFramework="4.5.1" />

一切都像魅力一样。

我找不到任何有记录的重大变更。有什么提示吗? 我可以用一个空的新 ASP 项目来重现它 有什么建议吗?

增加项。

这个问题是not与线程上的文化保存相关,因为这工作正常!

       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); 
    }

This article看起来像你需要的。

您是否正在使用app.UseRequestLocalization();在配置方法中?

UPDATE

看看这个module。我已经下载了示例并且它可以工作(您必须更新一些 nuget 包才能构建它。)该示例通过在 url 中提供区域性来工作,但可以进行配置。这适用于 .NET 4.6.1。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET 中间件不再保留文化 的相关文章

随机推荐