protected virtual Redirect FindMapping(string itemId)
        {
            Redirect redirectMapping = null;

            List <Redirect> .Enumerator enumerator = this.MappingsMap.GetEnumerator();
            try
            {
                while (enumerator.MoveNext())
                {
                    Redirect current = enumerator.Current;
                    if (itemId == current.TargetItemId)
                    {
                        redirectMapping = current;
                        return(redirectMapping);
                    }
                }
            }
            finally
            {
                ((IDisposable)enumerator).Dispose();
            }
            return(redirectMapping);
        }
        public override void ProcessRequest(HttpRequestArgs args)
        {
            //Check https & www is enabled and apply
            var siteLevel = SiteLevelConfigMapping;

            if (siteLevel != null)
            {
                var current = HttpContext.Current;

                if (current != null && siteLevel.RedirectToHttpsAlways)
                {
                    if (!current.Request.IsSecureConnection)
                    {
                        var url = current.Request.Url.AbsoluteUri;
                        if (url.StartsWith("http:"))
                        {
                            url = url = "https" + url.Remove(0, 4);
                            this.Redirect301(current.Response, url);
                        }
                    }
                }
                if (siteLevel.AddWwwPrefix)
                {
                    var url = current.Request.Url.AbsoluteUri;

                    var urlVal = url.Substring(url.IndexOf("//") + 2);
                    if (!urlVal.StartsWith("www."))
                    {
                        url = (url.Substring(0, url.IndexOf("//") + 2)) + "www." + urlVal;
                        this.Redirect301(current.Response, url);
                    }
                }
            }

            string   itemId          = Context.Item.ID.ToString();
            Redirect resolvedMapping = this.GetResolvedMapping(itemId);

            bool flag = resolvedMapping != null;

            if (resolvedMapping == null)
            {
                resolvedMapping = this.FindMapping(itemId);
            }
            if (resolvedMapping != null && !flag)
            {
                var dictionaryitem = GetCache <Dictionary <string, Redirect> >(ResolvedRedirectPrefix)
                                     ?? new Dictionary <string, Redirect>();

                dictionaryitem[itemId] = resolvedMapping;

                SetCache(ResolvedRedirectPrefix, dictionaryitem);
            }
            if (resolvedMapping != null && HttpContext.Current != null)
            {
                if (!resolvedMapping.RedirectUrl.IsNullOrEmpty())
                {
                    HttpContext.Current.Response.Redirect(resolvedMapping.RedirectUrl, true);
                    args.AbortPipeline();
                }
            }
        }