Atomia.Web.Plugin.PublicOrder.Filters.LocalizationDataLoader.OnActionExecuting C# (CSharp) Метод

OnActionExecuting() публичный Метод

Called when [action executing].
public OnActionExecuting ( System.Web.Mvc.ActionExecutingContext filterContext ) : void
filterContext System.Web.Mvc.ActionExecutingContext The filter context.
Результат void
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            bool updated = false;

            // Here you will load only language data, other locale settings are set through InternationalizationProvider implementer, and Internationalization attribute treats them automaticaly
            try
            {
                // if language cookie exists
                if (filterContext.HttpContext != null
                    && filterContext.HttpContext.Request != null)
                {
                    AtomiaCultureInfo languageObj = null;
                    bool shouldUpdateCookie = false;
                    if (filterContext.HttpContext.Request.Params["lang"] != null)
                    {
                        string selLanguage = filterContext.HttpContext.Request.Params["lang"];
                        string language = selLanguage.Split(new[] { "-" }, StringSplitOptions.RemoveEmptyEntries)[0];
                        string culture = selLanguage.Split(new[] { "-" }, StringSplitOptions.RemoveEmptyEntries)[1];
                        languageObj = new AtomiaCultureInfo { Language = language, Culture = culture };

                        shouldUpdateCookie = true;
                    }
                    else if (filterContext.HttpContext.Request.Cookies != null && filterContext.HttpContext.Request.Cookies["AtomiaCookieCollection"] != null
                        && !String.IsNullOrEmpty(filterContext.HttpContext.Request.Cookies["AtomiaCookieCollection"].Value))
                    {
                        try
                        {
                            JavaScriptSerializer js = new JavaScriptSerializer();

                            AtomiaCookieCollection cookieCollection =
                                js.Deserialize<AtomiaCookieCollection>(System.Web.HttpContext.Current.Request.Cookies["AtomiaCookieCollection"].Value);

                            AtomiaCookie languageCookie = cookieCollection.GetAtomiaCookie(
                                "OrderLanguageCookie",
                                filterContext.HttpContext.Request.ApplicationPath,
                                filterContext.HttpContext.Request.Url.Host);

                            if (languageCookie != null && !String.IsNullOrEmpty(languageCookie.CookieValue))
                            {
                                languageObj = js.Deserialize<AtomiaCultureInfo>(languageCookie.CookieValue);
                            }
                        }
                        catch
                        {
                        }
                    }
                    else
                    {
                        if (filterContext.RouteData.Values.ContainsKey("resellerHash"))
                        {
                            ResellerHelper.LoadResellerIntoSessionByHash((string)filterContext.RouteData.Values["resellerHash"]);
                        }
                        else
                        {
                            ResellerHelper.LoadResellerIntoSessionByUrl(filterContext.HttpContext.Request.Url.Host);
                        }

                        IList<Language> languages = ResellerHelper.GetResellerLanguages();
                        Language defaultResellerLanguage = languages.FirstOrDefault(l => l.IsDefault);
                        if (defaultResellerLanguage != null)
                        {
                            string language = defaultResellerLanguage.Code.Split(new[] { "-" }, StringSplitOptions.RemoveEmptyEntries)[0];
                            string culture = defaultResellerLanguage.Code.Split(new[] { "-" }, StringSplitOptions.RemoveEmptyEntries)[1];
                            languageObj = new AtomiaCultureInfo { Language = language, Culture = culture };
                        }
                    }

                    if (languageObj != null)
                    {
                        // get culture settings from session object, set in Internationalization attribute
                        AtomiaCultureInfo sessionCultureInfo = null;
                        if (filterContext.HttpContext.Session != null && filterContext.HttpContext.Session["SessionAccountLanguages"] != null)
                        {
                            sessionCultureInfo = (AtomiaCultureInfo)filterContext.HttpContext.Session["SessionAccountLanguages"];
                        }

                        if (sessionCultureInfo == null)
                        {
                            // Dont reload page if Session language is null, its app start
                            filterContext.HttpContext.Session["SessionAccountLanguages"] = languageObj;
                        }
                        else if (sessionCultureInfo.Language != languageObj.Language || sessionCultureInfo.Culture != languageObj.Culture)
                        {
                            filterContext.HttpContext.Session["SessionAccountLanguages"] = languageObj;
                            updated = true;
                            if (shouldUpdateCookie)
                            {
                                this.UpdateCookie(filterContext, languageObj);
                            }
                        }
                    }
                }

                if (updated)
                {
                    filterContext.HttpContext.Response.Redirect(filterContext.HttpContext.Request.RawUrl);
                }
            }
            catch (Exception ex)
            {
                OrderPageLogger.LogOrderPageException(ex);
                throw;
            }
        }
LocalizationDataLoader