public override void ProcessRequest(HttpRequestArgs args) { //if the source request url isn't aassociated with an item, skip this processor if (Context.Item == null) { return; } string itemId = Context.Item.ID.ToString(); ItemRedirect resolvedMapping = this.GetResolvedMapping(itemId); if (resolvedMapping == null) { resolvedMapping = this.FindMapping(itemId); if (resolvedMapping != null) { var dictionaryitem = GetCache <Dictionary <string, ItemRedirect> >(ResolvedItemRedirectPrefix) ?? new Dictionary <string, ItemRedirect>(); dictionaryitem[itemId] = resolvedMapping; SetCache(ResolvedItemRedirectPrefix, dictionaryitem); } } if (resolvedMapping != null && HttpContext.Current != null) { if (!resolvedMapping.Target.IsNullOrEmpty()) { //if we are preserving the incoming query string, append it now GetPreservedQueryString(resolvedMapping); if (resolvedMapping.RedirectType == RedirectType.Redirect301) { this.Redirect301(HttpContext.Current.Response, resolvedMapping.Target); } else if (resolvedMapping.RedirectType == RedirectType.Redirect302) { HttpContext.Current.Response.Redirect(resolvedMapping.Target, true); } else if (resolvedMapping.RedirectType == RedirectType.ServerTransfer) { HttpContext.Current.Server.TransferRequest(resolvedMapping.Target); } //default to 302 else { HttpContext.Current.Response.Redirect(resolvedMapping.Target, true); } args.AbortPipeline(); } } }
protected virtual ItemRedirect FindMapping(string itemId) { ItemRedirect redirectMapping = null; List <ItemRedirect> .Enumerator enumerator = this.MappingsMap.GetEnumerator(); try { while (enumerator.MoveNext()) { ItemRedirect current = enumerator.Current; if (itemId == current.Source) { redirectMapping = current; return(redirectMapping); } } } finally { ((IDisposable)enumerator).Dispose(); } return(redirectMapping); }