public virtual async Task UpdateAsync(TblRedirects record) { var oldRecord = await FindByIdAsync(record.Id); _dbContext.Redirects.AddOrUpdate(record); await _dbContext.SaveChangesAsync(); QueryCacheManager.ExpireTag(CacheTags.RedirectRule); _eventPublisher.EntityUpdated(record, oldRecord); }
public virtual async Task <int> AddAsync(TblRedirects record) { record.Name = string.IsNullOrWhiteSpace(record.Name) ? record.RequestedUrl : record.Name; _dbContext.Redirects.Add(record); await _dbContext.SaveChangesAsync(); QueryCacheManager.ExpireTag(CacheTags.RedirectRule); _eventPublisher.EntityInserted(record); return(record.Id); }
public virtual RedirectModel PrepareRedirectModel(TblRedirects rule) { var result = rule == null ? new RedirectModel() : rule.Adapt <RedirectModel>(); return(result); }
public virtual string GenerateRedirectUrl(TblRedirects rule, Uri requestedUrl, bool absoluteUrl = false) { if (rule.MatchType == MatchType.Exact) { var result = rule.ResponseUrl; if (rule.AppendQueryString && !string.IsNullOrWhiteSpace(requestedUrl.Query)) { result = rule.ResponseUrl.TrimEnd('?'); var query = requestedUrl.Query.TrimStart('?').ParseQueryString(); var queryArray = new List <string>(); foreach (string key in query.Keys) { queryArray.Add(key + "=" + query[key]); } result = result.BuildQueryStringUrl(queryArray.ToArray()); } if (absoluteUrl) { result = result.GetAbsoluteUrl(requestedUrl); } return(result); } var pattern = rule.RequestedUrl; if (rule.MatchType == MatchType.Wildcards) { pattern = pattern.WildCardToRegular(); } var groups = Regex.Match(requestedUrl.AbsoluteUri.Trim(), pattern, rule.IgnoreCase ? RegexOptions.IgnoreCase : RegexOptions.None).Groups; var responseUrl = rule.ResponseUrl; for (int i = 0; i < groups.Count; i++) { responseUrl = Regex.Replace(responseUrl, "{R:" + i + "}", groups[i].Value, RegexOptions.IgnoreCase); } if (rule.AppendQueryString && !string.IsNullOrWhiteSpace(requestedUrl.Query)) { var result = responseUrl.TrimEnd('?'); var query = requestedUrl.Query.TrimStart('?').ParseQueryString(); var queryArray = new List <string>(); foreach (string key in query.Keys) { queryArray.Add(key + "=" + query[key]); } responseUrl = result.BuildQueryStringUrl(queryArray.ToArray()); } if (absoluteUrl) { responseUrl = responseUrl.GetAbsoluteUrl(requestedUrl); } return(responseUrl); }