public static IApplicationBuilder UseSwaggerUIWithRuntimeHandler(
            this IApplicationBuilder app, string url, string action, Action <SwaggerUIOptions> setupAction)
        {
            app.UseSwaggerUI(c =>
            {
                setupAction(c);
                SwaggerUIRuntimeHandler.UiOptions = c;
                SwaggerUIRuntimeHandler.SetBasicUrlDescriptor(url, action);
            });

            app.UseRouter(r =>
            {
                r.MapGet(SwaggerUIRuntimeHandler.ControllerEndpointPrefix + "/{workspace}/{service}/{version}.json", async(request, response, routeData) =>
                {
                    using (var sourceToken = new CancellationTokenSource(SwaggerUIRuntimeHandler.UpdateInterval / 1.8))
                    {
                        var swaggerRuntimeUpdater = (ISwaggerRuntimeUpdater)r.ServiceProvider.GetService(typeof(ISwaggerRuntimeUpdater));
                        var definition            = await swaggerRuntimeUpdater.GetOpenApiDefinition(
                            routeData.Values["workspace"] as string,
                            routeData.Values["service"] as string,
                            routeData.Values["version"] as string,
                            sourceToken.Token);

                        await response.WriteAsync(definition.Schema.ToString(), sourceToken.Token);
                    }
                });
            });

            return(app);
        }
Example #2
0
 public SwaggerUpdaterBackgroundService(SwaggerUIRuntimeHandler swaggerUiRuntimeHandler)
 {
     _swaggerUiRuntimeHandler = swaggerUiRuntimeHandler;
 }