/// <summary> /// Invokes the specified context. /// </summary> /// <param name="context">The context.</param> /// <param name="discoveryProvider">The discovery provider.</param> /// <param name="swaggerEndPointRepository">Swagger endpoint repository.</param> /// <param name="downstreamSwaggerDocs">Repository for obtaining downstream swagger docs.</param> public async Task Invoke(HttpContext context, ISwaggerEndPointProvider swaggerEndPointRepository, IDownstreamSwaggerDocsRepository downstreamSwaggerDocs) { (string version, SwaggerEndPointOptions endPoint) = GetEndPoint(context.Request.Path, swaggerEndPointRepository); if (_downstreamInterceptor != null && !_downstreamInterceptor.DoDownstreamSwaggerEndpoint(context, version, endPoint)) { return; } IEnumerable <RouteOptions> routeOptions = _routes.Value .ExpandConfig(endPoint) .GroupByPaths(); RouteOptions route = routeOptions.FirstOrDefault(r => r.SwaggerKey == endPoint.Key); string content = await downstreamSwaggerDocs.GetSwaggerJsonAsync(route, endPoint, version); if (endPoint.TransformByOcelotConfig) { content = _transformer.Transform(content, routeOptions, GetServerName(context, endPoint)); } content = await ReconfigureUpstreamSwagger(context, content); await context.Response.WriteAsync(content); }
private JObject GetServiceDocs(RouteOptions route) => _memoryCache.GetOrCreate(route.SwaggerKey, (e) => { SwaggerEndPointOptions endpoint = _swaggerEndPointRepository.GetByKey(route.SwaggerKey); string docs = _downstreamSwaggerDocs.GetSwaggerJsonAsync(route, endpoint).Result; e.SetSlidingExpiration(TimeSpan.FromMinutes(5)); return(JObject.Parse(docs)); });
private async static Task <RoutesDocumentationProvider> CreateProviderAsync() { IDownstreamSwaggerDocsRepository downstreamSwaggerDocs = Substitute.For <IDownstreamSwaggerDocsRepository>(); ISwaggerEndPointProvider swaggerEndPointRepository = Substitute.For <ISwaggerEndPointProvider>(); IMemoryCache memoryCache = new MemoryCache(Options.Create(new MemoryCacheOptions())); string json = await AssemblyHelper.GetStringFromResourceFileAsync("AggregatesOpenApiResource.json"); downstreamSwaggerDocs.GetSwaggerJsonAsync(Arg.Any <RouteOptions>(), Arg.Any <SwaggerEndPointOptions>()).Returns(json); swaggerEndPointRepository.GetByKey(Arg.Any <string>()).Returns(new SwaggerEndPointOptions()); return(new RoutesDocumentationProvider(downstreamSwaggerDocs, swaggerEndPointRepository, memoryCache)); }