Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
 /// <summary>
 /// Initializes a new instance of the <see cref="RoutesDocumentationProvider"/> class.
 /// </summary>
 /// <param name="downstreamSwaggerDocs">The downstream swagger docs.</param>
 /// <param name="swaggerEndPointRepository">The swagger end point repository.</param>
 public RoutesDocumentationProvider(
     IDownstreamSwaggerDocsRepository downstreamSwaggerDocs,
     ISwaggerEndPointProvider swaggerEndPointRepository,
     IMemoryCache memoryCache)
 {
     _downstreamSwaggerDocs     = downstreamSwaggerDocs;
     _swaggerEndPointRepository = swaggerEndPointRepository;
     _memoryCache = memoryCache;
 }
        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));
        }