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

编程入门 行业动态 更新时间:2024-10-24 08:29:33
本文介绍了ASP.NET中间件不再保留文化的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

给予

asp 4与mvc 5.2.3和 4.6.1

asp 4 with mvc 5.2.3 and 4.6.1

我想基于主机等一些与请求相关的事物来更改CurrentCulture支持的全球化.

I want to change the CurrentCulture support globalization based on some request related things like the host.

设置文化的Owin中间件.

A Owin-Middleware which sets a culture.

产生该行为的简化版本:

Simplified Version which produces the behavior:

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

问题:

未保留文化,例如,Web Controler不具有中间件中设置的文化.

The Culture isn't preserved So for example a Web Controler doesn't have the culture which was set in the middleware.

这似乎与线程Culturepreserve问题无关.就像只调用某些方法并等待它们时一样,它的文化得以保留.

This doesn't seem to be related to the thread culturepreserve issue. As when calling just some methods and awaiting them the culture is preserved.

尽管在4.5.1中有效.(我已经在其他项目中以这种方式使用了它)当我像这样更改httpRuntime版本时:

Although with 4.5.1 it works. (I already used it this way in other projects) And when I change the httpRuntime version like this:

<httpRuntime targetFramework="4.5.1" />

一切都像魅力.

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

I can't find any documented breaking change for this. any hint? I can reproduce it with an empty new ASP Project Any advice?

一个补充.

此问题与无关,因为它可以正常工作!

This problem is not related to culture preservation on thread as this works fine !

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

推荐答案

我在microsoft在这里打开了一个支持案例,答复:

I Opened a support case at microsoft here there reply:

感谢您报告此问题.我们对设置进行了更改4.6中的当前文化.变化正在设定当前的文化与异步操作一起旅行.因此,如果您在异步操作将影响当前的异步执行上下文,并且当异步操作完成并切换回原始在执行上下文中,文化将在这种情况下重置为文化语境.您可以通过类似的方式阅读更多有关该内容的信息 msdn.microsoft/en-us/library/system.globalization.cultureinfo(v=vs.110).aspx#Async

如果您愿意,我们仍然为您提供一种恢复旧行为的方法.您可以通过执行以下代码来恢复原来的行为在您的应用初始化中:

We still provide a way for you to get the old behavior if you want to. you can get back to the old behavior by executing the following code in the your app initialization:

static string NoAsyncCurrentCultureFlagName = @"Switch.System.Globalization.NoAsyncCurrentCulture"; AppContext.SetSwitch(NoAsyncCurrentCultureFlagName, true);

更多推荐

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

本文发布于:2023-11-05 09:52:42,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1560524.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:中间件   文化   ASP   NET

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!