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() })); }
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))); }
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() })); }
private void WhenIMatchThePaths() { _result = _urlMatcher.Match(_path, _queryString, new UpstreamPathTemplate(_downstreamPathTemplate, 0, _containsQueryString, _downstreamPathTemplate)); }
private void WhenIMatchThePaths() { _result = _urlMatcher.Match(_downstreamUrlPath, _downstreamPathTemplate); }