public Response <DownstreamRoute> FindDownstreamRoute(string path, string httpMethod, IOcelotConfiguration configuration, string upstreamHost)
        {
            var downstreamRoutes = new List <DownstreamRoute>();

            var applicableReRoutes = configuration.ReRoutes
                                     .Where(r => RouteIsApplicableToThisRequest(r, httpMethod, upstreamHost))
                                     .OrderByDescending(x => x.UpstreamTemplatePattern.Priority);

            foreach (var reRoute in applicableReRoutes)
            {
                var urlMatch = _urlMatcher.Match(path, reRoute.UpstreamTemplatePattern.Template);

                if (urlMatch.Data.Match)
                {
                    downstreamRoutes.Add(GetPlaceholderNamesAndValues(path, reRoute));
                }
            }

            if (downstreamRoutes.Any())
            {
                var notNullOption = downstreamRoutes.FirstOrDefault(x => !string.IsNullOrEmpty(x.ReRoute.UpstreamHost));
                var nullOption    = downstreamRoutes.FirstOrDefault(x => string.IsNullOrEmpty(x.ReRoute.UpstreamHost));

                return(notNullOption != null ? new OkResponse <DownstreamRoute>(notNullOption) : new OkResponse <DownstreamRoute>(nullOption));
            }

            return(new ErrorResponse <DownstreamRoute>(new List <Error>
            {
                new UnableToFindDownstreamRouteError()
            }));
        }
Esempio n. 2
0
        public Response <DownstreamRoute> FindDownstreamRoute(string upstreamUrlPath, string upstreamHttpMethod, IOcelotConfiguration configuration)
        {
            upstreamUrlPath = upstreamUrlPath.SetLastCharacterAs('/');

            var applicableReRoutes = configuration.ReRoutes.Where(r => r.UpstreamHttpMethod.Count == 0 || r.UpstreamHttpMethod.Select(x => x.Method.ToLower()).Contains(upstreamHttpMethod.ToLower()));

            foreach (var reRoute in applicableReRoutes)
            {
                if (upstreamUrlPath == reRoute.UpstreamTemplatePattern)
                {
                    var templateVariableNameAndValues = _urlPathPlaceholderNameAndValueFinder.Find(upstreamUrlPath, reRoute.UpstreamPathTemplate.Value);

                    return(new OkResponse <DownstreamRoute>(new DownstreamRoute(templateVariableNameAndValues.Data, reRoute)));
                }

                var urlMatch = _urlMatcher.Match(upstreamUrlPath, reRoute.UpstreamTemplatePattern);

                if (urlMatch.Data.Match)
                {
                    var templateVariableNameAndValues = _urlPathPlaceholderNameAndValueFinder.Find(upstreamUrlPath, reRoute.UpstreamPathTemplate.Value);

                    return(new OkResponse <DownstreamRoute>(new DownstreamRoute(templateVariableNameAndValues.Data, reRoute)));
                }
            }

            return(new ErrorResponse <DownstreamRoute>(new List <Error>
            {
                new UnableToFindDownstreamRouteError()
            }));
        }
        public async Task <Response <DownstreamRoute> > FindDownstreamRoute(string upstreamUrlPath, string upstreamHttpMethod)
        {
            var configuration = await _configProvider.Get();

            var applicableReRoutes = configuration.Data.ReRoutes.Where(r => string.Equals(r.UpstreamHttpMethod.Method, upstreamHttpMethod, StringComparison.CurrentCultureIgnoreCase));

            foreach (var reRoute in applicableReRoutes)
            {
                if (upstreamUrlPath == reRoute.UpstreamTemplatePattern)
                {
                    var templateVariableNameAndValues = _urlPathPlaceholderNameAndValueFinder.Find(upstreamUrlPath, reRoute.UpstreamPathTemplate.Value);

                    return(new OkResponse <DownstreamRoute>(new DownstreamRoute(templateVariableNameAndValues.Data, reRoute)));
                }

                var urlMatch = _urlMatcher.Match(upstreamUrlPath, reRoute.UpstreamTemplatePattern);

                if (urlMatch.Data.Match)
                {
                    var templateVariableNameAndValues = _urlPathPlaceholderNameAndValueFinder.Find(upstreamUrlPath, reRoute.UpstreamPathTemplate.Value);

                    return(new OkResponse <DownstreamRoute>(new DownstreamRoute(templateVariableNameAndValues.Data, reRoute)));
                }
            }

            return(new ErrorResponse <DownstreamRoute>(new List <Error>
            {
                new UnableToFindDownstreamRouteError()
            }));
        }
        public Response <UpstreamRoute> Get(string downstreamUrlPath, string downstreamQueryString, string httpMethod, IInternalConfiguration configuration, string downstreamHost)
        {
            var upstreamRoutes = new List <UpstreamRoute>();

            var applicableReRoutes = configuration.ReRoutes
                                     .Where(r => RouteIsApplicableToThisRequest(r, httpMethod, downstreamHost))
                                     .OrderByDescending(x => x.UpstreamTemplatePattern.Priority);

            foreach (var reRoute in applicableReRoutes)
            {
                var urlMatch = _urlMatcher.Match(downstreamUrlPath, downstreamQueryString, reRoute.DownstreamReRoute.First().DownstreamPathTemplate);

                if (urlMatch.Data.Match)
                {
                    upstreamRoutes.Add(GetPlaceholderNamesAndValues(downstreamUrlPath, downstreamQueryString, reRoute));
                }
            }

            if (upstreamRoutes.Any())
            {
                var notNullOption = upstreamRoutes.FirstOrDefault(x => !string.IsNullOrEmpty(x.ReRoute.UpstreamHost));
                var nullOption    = upstreamRoutes.FirstOrDefault(x => string.IsNullOrEmpty(x.ReRoute.UpstreamHost));

                return(notNullOption != null ? new OkResponse <UpstreamRoute>(notNullOption) : new OkResponse <UpstreamRoute>(nullOption));
            }

            return(new ErrorResponse <UpstreamRoute>(new UnableToFindDownstreamRouteError(upstreamUrlPath, httpMethod)));
        }
Esempio n. 5
0
        public Response <DownstreamRoute> FindDownstreamRoute(string path, string httpMethod, IOcelotConfiguration configuration)
        {
            var applicableReRoutes = configuration.ReRoutes.Where(r => r.UpstreamHttpMethod.Count == 0 || r.UpstreamHttpMethod.Select(x => x.Method.ToLower()).Contains(httpMethod.ToLower())).OrderByDescending(x => x.UpstreamTemplatePattern.Priority);

            foreach (var reRoute in applicableReRoutes)
            {
                if (path == reRoute.UpstreamTemplatePattern.Template)
                {
                    return(GetPlaceholderNamesAndValues(path, reRoute));
                }

                var urlMatch = _urlMatcher.Match(path, reRoute.UpstreamTemplatePattern.Template);

                if (urlMatch.Data.Match)
                {
                    return(GetPlaceholderNamesAndValues(path, reRoute));
                }
            }

            return(new ErrorResponse <DownstreamRoute>(new List <Error>
            {
                new UnableToFindDownstreamRouteError()
            }));
        }
Esempio n. 6
0
 private void WhenIMatchThePaths()
 {
     _result = _urlMatcher.Match(_path, _queryString, new UpstreamPathTemplate(_downstreamPathTemplate, 0, _containsQueryString, _downstreamPathTemplate));
 }
Esempio n. 7
0
 private void WhenIMatchThePaths()
 {
     _result = _urlMatcher.Match(_downstreamUrlPath, _downstreamPathTemplate);
 }