/// <summary> /// Configures swagger Middleware. /// </summary> /// <param name="app">The application.</param> /// <param name="swaggerConfiguration">The swagger configuration.</param> /// <returns></returns> public static IApplicationBuilder ConfigureSwagger(this IApplicationBuilder app, SwaggerConfigurationModel swaggerConfiguration) { app.UseSwagger(); app.UseSwaggerUI(c => { foreach (var current in swaggerConfiguration.Versions) { c.SwaggerEndpoint($"/swagger/v{current.Version}/swagger.json", current.Title); } c.RoutePrefix = ""; }); return(app); }
internal static IServiceCollection AddSwagger(this IServiceCollection services, SwaggerConfigurationModel swaggerConfiguration) { services.AddSwaggerGen(x => { x.CustomSchemaIds(y => y.FullName); foreach (VersionConfigurationModel current in swaggerConfiguration.Versions) { x.SwaggerDoc($"v{current.Version}", new OpenApiInfo { Version = $"v{current.Version}", Title = current.Title, Description = current.Description, Contact = new OpenApiContact { Email = current.Email } }); } x.DocInclusionPredicate((version, apiDescriptor) => { if (!apiDescriptor.TryGetMethodInfo(out MethodInfo mi)) { return(false); } if (!Regex.IsMatch(apiDescriptor.RelativePath, @"v{version}") && !Regex.IsMatch(apiDescriptor.RelativePath, @"v(\d+\.)?(\d+\.)?(\*|\d+)")) { return(false); } System.Collections.Generic.IEnumerable <ApiVersion> versions = mi.DeclaringType.GetCustomAttributes(true) .OfType <ApiVersionAttribute>() .SelectMany(attr => attr.Versions); ApiVersion[] maps = mi.GetCustomAttributes() .OfType <MapToApiVersionAttribute>() .SelectMany(attr => attr.Versions).ToArray(); return(versions.Any(v => $"v{v.ToString()}" == version) && (maps.Length == 0 || maps.Any(v => $"v{v.ToString()}" == version))); }); System.Collections.Generic.IEnumerable <string> documentations = swaggerConfiguration.XmlDocumentation ?? new[] { $"{Assembly.GetEntryAssembly().GetName().Name}.xml" }; foreach (string documentationPath in documentations) { string xmlPath = Path.Combine(AppContext.BaseDirectory, documentationPath); x.IncludeXmlComments(xmlPath); } }); return(services); }