2016-04-06 10 views
3

Ich habe eine owin Kulturmittelware, die sehr nett läuft.OwinMiddleware behält Kulturänderung in .net 4.6 nicht bei. *

Es ändert nur die Kultur entsprechend der URL. Dies funktioniert in 4.5. * Perfekt. Wenn nun das Runtiome in 4.6.1 geändert wird, bleibt die Kultur nicht mehr erhalten und es funktioniert einfach nicht mehr.

Ich kann es in einer sehr einfachen Lösung reproduzieren, die nur diese Middleware

public class CultureMiddleware : OwinMiddleware 
{ 
    public CultureMiddleware(OwinMiddleware next) 
     : base(next) 
    { 
    } 

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

Ich lege die Middleware an die Pipeline hat die Simulation der Kulturwandel wird es ausführen, aber wenn ich rufe eine Aktion der Controller doesn Ich habe die Kultur (wie es in .net 4.5.1 hatte)

Ich schon hier gepostet, aber die Unterstützung ist wirklich langsam. Eine Antwort alle zwei Wochen und dann scheint es, als wären sie nicht versucht haben, was sie schreiben :-(

https://connect.microsoft.com/VisualStudio/feedback/details/2455357

Antwort

4

ich eine Antwort von Microsoft bekam, die für mich funktioniert

können Sie versuchen, das folgende Element in Ihrer Datei web.config festzulegen. Dieses Element muss Kind sein, um das <appSettings> Element.

<add key="appContext.SetSwitch:Switch.System.Globalization.NoAsyncCurrentCulture" value="true" /> 
+1

Schöne finden. Dies funktionierte perfekt für mich nach ein paar Tagen schlug meinen Kopf gegen eine Mauer! – Gareth

2

ich auch versucht, es zu reparieren mit OwinMiddleware scheiterte aber.

Meine Lösung war, zu schaffen ein Action und registriert diese beim Start.

public partial class Startup : UmbracoDefaultOwinStartup 
{ 
    public override void Configuration(IAppBuilder app) 
    { 
     GlobalFilters.Filters.Add(new CultureCookieFilter()); 
     base.Configuration(app); 
    } 
} 

public class CultureCookieFilter : ActionFilterAttribute 
{ 
    private const string CULTURE_KEY = "X-Culture"; 

    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     if (filterContext.HttpContext.Request.Cookies[CULTURE_KEY] != null) 
     { 
      var langCookie = filterContext.HttpContext.Request.Cookies[CULTURE_KEY]; 
      if (langCookie != null) 
      { 
       var lang = langCookie.Value; 
       Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(lang); 
       Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(lang); 
      } 
     } 

     base.OnActionExecuting(filterContext); 
    } 
} 
Verwandte Themen