Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }