/// <summary>Registers swagger infrastructure.</summary> /// <param name="builder">Web api builder instance.</param> /// <param name="options">Options delegate for configuring swagger.</param> /// <returns>Service Collection instance.</returns> public static IWebApiBuilder AddSwaggerInfrastructure(this IWebApiBuilder builder, Action <SwaggerConfigurationOptions> options) { builder.Services.ConfigureOptions <DefaultSwaggerConfigureSetup>(); builder.Services.AddOptions <SwaggerConfigurationOptions>() .Configure(options) .Validate(x => !string.IsNullOrEmpty(x.ApplicationName), "Application name is required"); var serviceProvider = builder.Services.BuildServiceProvider(); var swaggerConfigurationOptions = serviceProvider.GetRequiredService <IOptions <SwaggerConfigurationOptions> >(); builder.Services.AddSwaggerGen(c => { // resolve the IApiVersionDescriptionProvider service // note: that we have to build a temporary service provider here because one has not been created yet var provider = builder.Services.BuildServiceProvider().GetRequiredService <IApiVersionDescriptionProvider>(); // add a swagger document for each discovered API version // note: you might choose to skip or document deprecated API versions differently foreach (var description in provider.ApiVersionDescriptions) { c.SwaggerDoc(description.GroupName, CreateInfoForApiVersion(description, swaggerConfigurationOptions.Value)); } // Locate the XML file being generated by ASP.NET... var assemblies = AppDomain.CurrentDomain.GetAssemblies().Where(w => w.GetName().Name.StartsWith("RFERL")); foreach (var assembly in assemblies) { var xmlFile = $"{assembly.GetName().Name}.XML"; var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile); if (File.Exists(xmlPath)) { c.IncludeXmlComments(xmlPath); } } c.SchemaFilter <SwaggerExcludeSchemaFilter>(); c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First()); c.DescribeAllEnumsAsStrings(); c.DescribeStringEnumsInCamelCase(); c.AddFluentValidationRules(); swaggerConfigurationOptions.Value.SetCustomSwaggerOptions?.Invoke(c); }); return(builder); }
/// <summary>Registers swagger infrastructure.</summary> /// <param name="builder">Web api builder instance.</param> /// <returns>Service Collection instance.</returns> public static IWebApiBuilder AddSwaggerInfrastructure(this IWebApiBuilder builder) { builder.AddSwaggerInfrastructure(opt => { }); return(builder); }