public async Task Invoke(HttpContext httpContext) { //if ajax we dont care about potential language redirect if (httpContext.Request.IsAjax()) { await _next(httpContext); } //get the culture from the cookie //get the culture from the provider (Using logic) //if they are the same or not just continue //if there is no culture in the url, redirect SiteLanguageCookie currentCookieCulture = GetCurrentCultureFromCookie(httpContext); string determinedCulture = GetDeterminedCulture(httpContext); string urlCutlture = GetCurrentCultureFromUrl(httpContext); if ((currentCookieCulture == null || currentCookieCulture.Culture == determinedCulture) && urlCutlture == string.Empty) { httpContext.Response.Redirect($"/{determinedCulture}{httpContext.Request.Path}"); } else { if (urlCutlture != string.Empty && determinedCulture != urlCutlture) { httpContext.Response.Redirect(httpContext.Request.Path.ToString().Replace($"/{urlCutlture}", $"/{determinedCulture}")); } } await _next(httpContext); }
private SiteLanguageCookie GetCurrentCultureFromCookie(HttpContext httpContext) { SiteLanguageCookie cookie = CookieHelper.GetCultureFromCookieFromRequest(httpContext); if (cookie != null) { return(cookie); } return(null); }
public override Task <ProviderCultureResult> DetermineProviderCultureResult(HttpContext httpContext) { string cultureCode = GetCultureFromUrl(httpContext); if (cultureCode != string.Empty) { if (IsCultureCodeSupported(cultureCode)) { return(Task.FromResult(new ProviderCultureResult(cultureCode))); } } else { SiteLanguageCookie cookie = GetCultureFromCookie(httpContext); if (cookie != null) { switch (cookie.State) { case LanguageState.Profile: cultureCode = cookie.Culture; return(Task.FromResult(new ProviderCultureResult(cultureCode))); case LanguageState.Browser: case LanguageState.NotSet: if (IsAuthenticatedRequest(httpContext)) { cultureCode = ""; //get profile code here if (IsCultureCodeSupported(cultureCode)) { SetSiteLanguageCookie(httpContext, cultureCode, LanguageState.Profile); return(Task.FromResult(new ProviderCultureResult(cultureCode))); } return(Task.FromResult(new ProviderCultureResult(GetDefaultCultureCode()))); } return(Task.FromResult(new ProviderCultureResult(cultureCode))); } } cultureCode = GetCultureFromBrowserLanguage(httpContext); if (IsCultureCodeSupported(cultureCode)) { SetSiteLanguageCookie(httpContext, cultureCode, LanguageState.Browser); return(Task.FromResult(new ProviderCultureResult(cultureCode))); } } SetSiteLanguageCookie(httpContext, cultureCode, LanguageState.NotSet); return(Task.FromResult(new ProviderCultureResult(GetDefaultCultureCode()))); }