Closed
Description
Background and Motivation
See #54598 for full background and motivation.
As part of our effort to add built-in support for OpenAPI document generation in the framework, we are adding APIs to register OpenAPI-related services and endpoints in the target user app.
Proposed API
Note: All APIs are net new.
// Assembly: Microsoft.AspNetCore.OpenApi
namespace Microsoft.AspNetCore.Builder;
public static class IEndpointRouteBuilderExtensions
{
public static IEndpointRouteBuilder MapOpenApi(this IEndpointRouteBuilder builder);
}
// Assembly: Microsoft.AspNetCore.OpenApi
namespace Microsoft.Extensions.DependencyInjection;
public static class IServiceCollectionExtensions
{
public static IServiceCollection AddOpenApi(this IServiceCollection serviceCollection);
public static IServiceCollection AddOpenApi(this IServiceCollection serviceCollection, Action<OpenApiOptions> configureOptions);
}
// Assembly: Microsoft.AspNetCore.OpenApi
namespace Microsoft.AspNetCore.OpenApi;
public class OpenApiOptions
{
public string JsonFilePath { get; set; }
public OpenApiSpecVersion OpenApiVersion { get; set; }
}
Usage Examples
var builder = WebApplication.CreateBuilder();
builder.Services.AddOpenApi();
var app = builder.Build();
app.MapOpenApi();
app.MapGet("/", () => "Hello world!");
app.Run();
var builder = WebApplication.CreateBuilder();
builder.Services.AddOpenApi(options =>
{
options.JsonFilePath = "/custom.openapi.json";
});
var app = builder.Build();
app.MapOpenApi();
app.MapGet("/", () => "Hello world!");
app.Run();
Alternative Designs
N/A
Risks
N/A