private static void AddSecurityDefinitionAndRequirements(OpenApiSettings openApiSettings, SwaggerGenOptions options) { if (openApiSettings.Security != null) { options.AddSecurityDefinition(openApiSettings.Security.Scheme, new OpenApiSecurityScheme { Description = openApiSettings.Security.Description, Name = openApiSettings.Security.Name, In = ParameterLocation.Header, Scheme = openApiSettings.Security.Scheme, Type = openApiSettings.Security.SchemeType, BearerFormat = openApiSettings.Security.BearerFormat }); options.AddSecurityRequirement(new OpenApiSecurityRequirement { { new OpenApiSecurityScheme { Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = openApiSettings.Security.Scheme } }, new List <string>() } }); } }
public void Given_Value_Property_Should_Return_Value() { var settings = new OpenApiSettings(); settings.Info.Should().NotBeNull(); settings.Info.Version.Should().Be("1.0.0"); settings.Info.Title.Should().Be("Azure Functions Open API Extension"); }
public static IApplicationBuilder UseCustomOpenApi(this IApplicationBuilder application, OpenApiSettings openApiSettings) { application.UseSwagger(); application.UseSwaggerUI(c => { // e.g. /swagger/v1/swagger.json c.SwaggerEndpoint($"/{openApiSettings.RoutePrefix}/{openApiSettings.Version}/swagger.json", openApiSettings.Title); c.DisplayOperationId(); }); return(application); }
/// <summary> /// Gets the <see cref="IOpenApiConfigurationOptions"/> instance from the given assembly. /// </summary> /// <param name="assembly">The executing assembly instance.</param> /// <returns>Returns the <see cref="IOpenApiConfigurationOptions"/> instance resolved.</returns> public static IOpenApiConfigurationOptions Resolve(Assembly assembly) { var type = assembly.GetTypes() .SingleOrDefault(p => p.GetInterface("IOpenApiConfigurationOptions", ignoreCase: true).IsNullOrDefault() == false); if (type.IsNullOrDefault()) { var settings = new OpenApiSettings(); return(settings); } var options = Activator.CreateInstance(type); return(options as IOpenApiConfigurationOptions); }
private void SetOpenApiInfo() { var assembly = Assembly.LoadFrom(this.CompiledDllPath); var type = assembly.GetTypes() .SingleOrDefault(p => p.GetInterface("IOpenApiConfigurationOptions", ignoreCase: true).IsNullOrDefault() == false); if (type.IsNullOrDefault()) { var settings = new OpenApiSettings(); this.OpenApiInfo = settings.Info; return; } var options = Activator.CreateInstance(type); this.OpenApiInfo = (options as IOpenApiConfigurationOptions).Info; }
public static IApplicationBuilder UseServiceApiDocumentation(this IApplicationBuilder app, IApiVersionDescriptionProvider provider, OpenApiSettings openApiSettings) { app.UseSwagger(options => { var prefixPath = openApiSettings.BaseRelativePath; options.RouteTemplate = $"{prefixPath}/{{documentName}}/swagger.json"; }); app.UseSwaggerUI(options => { var prefixPath = openApiSettings.BaseRelativePath; foreach (var description in provider.ApiVersionDescriptions) { options.SwaggerEndpoint($"/{prefixPath}/{description.GroupName}/swagger.json", description.GroupName.ToUpperInvariant()); } options.RoutePrefix = openApiSettings.BaseRelativePath; }); return(app); }
/// <summary> /// Initializes a new instance of the <see cref="OpenApiTriggerFunctionProvider"/> class. /// </summary> public OpenApiTriggerFunctionProvider(OpenApiSettings settings) { this._settings = settings ?? throw new ArgumentNullException(nameof(settings)); this._bindings = this.SetupOpenApiHttpBindings(); }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IApiVersionDescriptionProvider versionInfo, OpenApiSettings openApiSettings) { app .UseDeveloperExceptionPageInDevelopment(env) .UseHttpsRedirection() .UseOpenApi(versionInfo, openApiSettings) .UseRouting() .UseAuthorization() .UseEndpoints(endpoints => endpoints.MapControllers()); }
public static IApplicationBuilder UseOpenApi(this IApplicationBuilder app, IApiVersionDescriptionProvider versionProvider, OpenApiSettings settings) { Guard.IsNotNull(versionProvider, nameof(versionProvider)); Guard.IsNotNull(settings, nameof(settings)); app.UseSwagger(); if (settings.IsUserInterfaceEnabled) { app.UseSwaggerUI(options => { // build a swagger endpoint for each discovered API version foreach (var description in versionProvider.ApiVersionDescriptions) { options.SwaggerEndpoint($"/swagger/{description.GroupName}/swagger.json", $"{ApiName} {description.GroupName}"); } }); } return(app); }
private static OpenApiInfo CreateInfoForApiVersion(ApiVersionDescription description, OpenApiSettings settings) { var contact = new OpenApiContact { Name = (string.IsNullOrWhiteSpace(settings.Contact?.Name))?null: settings.Contact.Name, Email = (string.IsNullOrWhiteSpace(settings.Contact?.Email))?null:settings.Contact.Email, Url = (string.IsNullOrWhiteSpace(settings.Contact?.Url)) ? null : new Uri(settings.Contact.Url) }; var license = new OpenApiLicense { Name = (string.IsNullOrWhiteSpace(settings.License?.Name) ? null : settings.License.Name), Url = (string.IsNullOrWhiteSpace(settings.License?.Url)) ? null : new Uri(settings.License.Url) }; var apiDescription = (string.IsNullOrWhiteSpace(settings.ServiceDescription)) ? ApiName : settings.ServiceDescription; return(new OpenApiInfo() { Title = $"{ApiName}", Version = description.ApiVersion.ToString(), Description = (description.IsDeprecated) ? $"{apiDescription} This API version has been deprecated." : apiDescription, Contact = contact, License = license, TermsOfService = (string.IsNullOrWhiteSpace(settings.TermsOfServiceUrl))?null:new Uri(settings.TermsOfServiceUrl) }); }
public static IServiceCollection AddOpenApi(this IServiceCollection services, OpenApiSettings settings) { Guard.IsNotNull(settings, nameof(settings)); return(services.AddSwaggerGen(options => { var provider = services.BuildServiceProvider().GetRequiredService <IApiVersionDescriptionProvider>(); foreach (var description in provider.ApiVersionDescriptions) { options.SwaggerDoc(description.GroupName, CreateInfoForApiVersion(description, settings)); } })); }