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); }
public SwaggerUpdaterBackgroundService(SwaggerUIRuntimeHandler swaggerUiRuntimeHandler) { _swaggerUiRuntimeHandler = swaggerUiRuntimeHandler; }