BetterCms.Module.Pages.Services.DefaultRedirectService.RecursiveCircularLoop C# (CSharp) Method

RecursiveCircularLoop() private method

Recursive method checks for circular loops in redirects list.
private RecursiveCircularLoop ( IList redirects, string redirectUrl, List checkedIds, string startPageUrl, string startRedirectUrl ) : void
redirects IList The redirects.
redirectUrl string The redirect URL.
checkedIds List The checked ids.
startPageUrl string The start page URL.
startRedirectUrl string The start redirect URL.
return void
        private void RecursiveCircularLoop(IList<Redirect> redirects, string redirectUrl, List<Guid> checkedIds, string startPageUrl, string startRedirectUrl)
        {
            var redirectTo = redirects.FirstOrDefault(r => r.PageUrl == redirectUrl);
            if (redirectTo != null)
            {
                if (checkedIds.Contains(redirectTo.Id))
                {
                    var message = PagesGlobalization.SaveRedirect_CircularLoopDetected_Message;
                    var logMessage = string.Format("Cannot save redirect. Circular redirect loop from url {0} to url {1} detected.", startPageUrl, startRedirectUrl);
                    throw new ValidationException(() => message, logMessage);
                }

                checkedIds.Add(redirectTo.Id);
                RecursiveCircularLoop(redirects, redirectTo.RedirectUrl, checkedIds, startPageUrl, startRedirectUrl);
            }
        }