public override void OnActionExecuting(ActionExecutingContext context) { var lang = context.RouteData.Values["lang"] as string; if (lang == null) { var request = new GetPreferredLanguageRequest { AvailableLanguages = new string[] { "en-gb", "fr-fr", "de-de" } }; var preferredLang = this.languageService.GetPreferredLanguage(request); var routes = new RouteValueDictionary { { "lang", preferredLang }, { "controller", context.RouteData.Values["controller"] }, { "action", context.RouteData.Values["action"] }, { "id", context.RouteData.Values["id"] } }; // 301 redirects are cached aggressively by browsers context.HttpContext.Response.CacheControl = "no-cache"; context.Result = new RedirectToRouteResult("DefaultLocalized", routes, true); } }
public GetPreferredLanguageResponse GetPreferredLanguage(GetPreferredLanguageRequest request) { var response = new GetPreferredLanguageResponse(); if (request.AvailableLanguages.Any()) { var savedValue = this.storageService.GetValue <string>(key); if (savedValue.Status == StatusCode.OK && request.AvailableLanguages.Any(x => x.Equals(savedValue.Value, StringComparison.InvariantCultureIgnoreCase))) { response.LanguageCode = savedValue.Value; } else { response.LanguageCode = this.GetPreferredLanguage(request.AvailableLanguages, request.DefaultLanguage ?? defaultLanguage); } response.Status = StatusCode.OK; } else { response.Status = StatusCode.BadRequest; } return(response); }
public GetPreferredLanguageResponse GetPreferredLanguage(GetPreferredLanguageRequest request) { var response = new GetPreferredLanguageResponse(); if (request.AvailableLanguages.Any()) { var savedValue = this.storageService.GetValue<string>(key); if (savedValue.Status == StatusCode.OK && request.AvailableLanguages.Any(x => x.Equals(savedValue.Value, StringComparison.InvariantCultureIgnoreCase))) { response.LanguageCode = savedValue.Value; } else { response.LanguageCode = this.GetPreferredLanguage(request.AvailableLanguages, request.DefaultLanguage ?? defaultLanguage); } response.Status = StatusCode.OK; } else { response.Status = StatusCode.BadRequest; } return response; }