public int AddRedirect(int?sortOrder, string host, string fromUrl, bool?wildcard, string toUrl, int?toContentId, string toContentLang) { if (string.IsNullOrEmpty(toUrl) && toContentId.GetValueOrDefault(0) <= 0) { return(0); } if (string.IsNullOrEmpty(toContentLang)) { toContentLang = null; } if (string.IsNullOrEmpty(fromUrl)) { fromUrl = "/"; } if (!fromUrl.StartsWith("/")) { fromUrl = "/" + fromUrl; } using (var context = ServiceLocator.Current.GetInstance <RedirectDbContext>()) { var r = new RedirectRule() { SortOrder = sortOrder.GetValueOrDefault(0), Host = host, FromUrl = fromUrl, Wildcard = wildcard.GetValueOrDefault(false), ToUrl = toUrl, ToContentId = toContentId.GetValueOrDefault(0), ToContentLang = toContentLang, }; context.RedirectRules.Add(r); return(context.SaveChanges()); } }
public int RemoveAllDuplicateRules() { int counter = 0; using (var context = ServiceLocator.Current.GetInstance <RedirectDbContext>()) { var rules = context.Database.SqlQuery <RedirectRule>(@"select * from [" + RedirectRuleStorage.RedirectTableName + @"] where ([FromUrl] IN ( SELECT [FromUrl] FROM [SEO_Redirect] GROUP BY [SortOrder] ,[Host] ,[FromUrl] ,[ToUrl] ,[ToContentId] ,[ToContentLang] ,[Wildcard] HAVING COUNT(*) > 1 ) ) order by [FromUrl]" ).ToList(); RedirectRule workingRule = null; foreach (var rule in rules) { if (workingRule != null && workingRule.FromUrl == rule.FromUrl) { DeleteRedirect(rule.Id); counter++; } else if (workingRule == null) { workingRule = rule; } else if (workingRule.FromUrl != rule.FromUrl) { workingRule = rule; } } } return(counter); }
public string GetPrimaryRedirectUrlOrDefault(string host, string relativeUrl) { if (!RedirectRuleStorage.IsUpToDate) { return(null); } if (string.IsNullOrEmpty(relativeUrl)) { return(null); } if (relativeUrl.Length > 1 && relativeUrl.Last() == '/') { relativeUrl = relativeUrl.Remove(relativeUrl.Length - 1); } relativeUrl = HttpUtility.UrlDecode(relativeUrl.ToLower()); using (var context = ServiceLocator.Current.GetInstance <RedirectDbContext>()) { var exactMatch = context.RedirectRules .Where(x => x.Host == null || x.Host == "*" || x.Host.Equals(host, StringComparison.InvariantCultureIgnoreCase)) .Where(x => x.FromUrl.Equals(relativeUrl, StringComparison.InvariantCultureIgnoreCase)) .OrderBy(x => x.SortOrder) .ThenBy(x => x.FromUrl) .FirstOrDefault(); var wildcards = context.RedirectRules .Where(x => x.Host == null || x.Host == "*" || x.Host.Equals(host, StringComparison.InvariantCultureIgnoreCase)) .Where(x => x.Wildcard) .OrderBy(x => x.SortOrder) .ThenBy(x => x.FromUrl); var match = wildcards.FirstOrDefault(x => relativeUrl.StartsWith(x.FromUrl) || relativeUrl.Equals(x.FromUrl, StringComparison.InvariantCultureIgnoreCase)); RedirectRule theMatch = (exactMatch != null && match != null) ? exactMatch.SortOrder <= match.SortOrder ? exactMatch : match : exactMatch ?? match; if (theMatch == null) { return(null); } return(theMatch.ToContentId > 0 ? _urlResolver.GetUrl(new ContentReference(theMatch.ToContentId), theMatch.ToContentLang) : theMatch.ToUrl); } }
public int AddRedirect(int? sortOrder, string fromUrl, bool? wildcard, string toUrl, int? toContentId, string toContentLang) { if (string.IsNullOrEmpty(toUrl) && toContentId.GetValueOrDefault(0) <= 0) return 0; if (string.IsNullOrEmpty(toContentLang)) toContentLang = null; if (string.IsNullOrEmpty(fromUrl)) fromUrl = "/"; if (!fromUrl.StartsWith("/")) fromUrl = "/" + fromUrl; using (var context = ServiceLocator.Current.GetInstance<RedirectDbContext>()) { var r = new RedirectRule() { SortOrder = sortOrder.GetValueOrDefault(0), FromUrl = fromUrl, Wildcard = wildcard.GetValueOrDefault(false), ToUrl = toUrl, ToContentId = toContentId.GetValueOrDefault(0), ToContentLang = toContentLang, }; context.RedirectRules.Add(r); return context.SaveChanges(); } }