Generera OpenAPI-dokument
Microsoft.AspNetCore.OpenApi
-paketet ger inbyggt stöd för OpenAPI-dokumentgenerering i ASP.NET Core. Paketet innehåller följande funktioner:
- Stöd för att generera OpenAPI-dokument under körningen och ge åtkomst till dem via en slutpunkt i applikationen.
- Stöd för "transformerings-API:er" som gör det möjligt att ändra det genererade dokumentet.
- Stöd för att generera flera OpenAPI-dokument från en enda app.
- Utnyttjar JSON-schemastöd som tillhandahålls av
System.Text.Json
. - Är kompatibel med inbyggd AoT.
Paketinstallation
Installera Microsoft.AspNetCore.OpenApi
-paketet:
Kör följande kommando från Package Manager-konsolen:
Install-Package Microsoft.AspNetCore.OpenApi
Konfigurera OpenAPI-dokumentgenerering
Följande kod:
- Lägger till OpenAPI-tjänster.
- Aktiverar slutpunkten för att visa OpenAPI-dokumentet i JSON-format.
var builder = WebApplication.CreateBuilder();
builder.Services.AddOpenApi();
var app = builder.Build();
app.MapOpenApi();
app.MapGet("/", () => "Hello world!");
app.Run();
Starta appen och gå till https://localhost:<port>/openapi/v1.json
för att visa det genererade OpenAPI-dokumentet.
Alternativ för att anpassa OpenAPI-dokumentgenerering
Följande avsnitt visar hur du anpassar OpenAPI-dokumentgenerering.
Anpassa OpenAPI-dokumentnamnet
Varje OpenAPI-dokument i en app har ett unikt namn. Standarddokumentnamnet som är registrerat är v1
.
builder.Services.AddOpenApi(); // Document name is v1
Dokumentnamnet kan ändras genom att skicka namnet som en parameter till AddOpenApi
-anropet.
builder.Services.AddOpenApi("internal"); // Document name is internal
Dokumentnamnet visas på flera platser i OpenAPI-implementeringen.
När du hämtar det genererade OpenAPI-dokumentet anges dokumentnamnet som argumentet documentName
parameter i begäran. Följande begäranden behandlar dokumenten v1
och internal
.
GET http://localhost:5000/openapi/v1.json
GET http://localhost:5000/openapi/internal.json
Anpassa OpenAPI-versionen av ett genererat dokument
Som standard skapar OpenAPI-dokumentgenerering ett dokument som är kompatibelt med v3.0 i OpenAPI-specifikationen. Följande kod visar hur du ändrar standardversionen av OpenAPI-dokumentet:
builder.Services.AddOpenApi(options =>
{
options.OpenApiVersion = OpenApiSpecVersion.OpenApi2_0;
});
Anpassa OpenAPI-slutpunktsvägen
Som standard exponerar OpenAPI-slutpunkten som registrerats via ett anrop till MapOpenApi dokumentet på /openapi/{documentName}.json
slutpunkten. Följande kod visar hur du anpassar den väg där OpenAPI-dokumentet är registrerat:
app.MapOpenApi("/openapi/{documentName}/openapi.json");
Det är möjligt, men rekommenderas inte, att ta bort documentName
vägparametern från slutpunktsvägen. När documentName
vägparametern tas bort från slutpunktsrutten försöker ramverket lösa ut dokumentnamnet från en frågeparameter. Om du inte anger documentName
i antingen vägen eller frågan kan det leda till oväntat beteende.
Anpassa OpenAPI-slutpunkten
Eftersom OpenAPI-dokumentet hanteras via en slutpunkt för routningshanterare är alla anpassningar som är tillgängliga för minimala standardslutpunkter tillgängliga för OpenAPI-slutpunkten.
Begränsa OpenAPI-dokumentåtkomst till behöriga användare
OpenAPI-slutpunkten aktiverar inte några auktoriseringskontroller som standard. Auktoriseringskontroller kan dock tillämpas på OpenAPI-dokumentet. I följande kod är åtkomsten till OpenAPI-dokumentet begränsad till dem med den tester
rollen:
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.OpenApi;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.OpenApi.Models;
var builder = WebApplication.CreateBuilder();
builder.Services.AddAuthentication().AddJwtBearer();
builder.Services.AddAuthorization(o =>
{
o.AddPolicy("ApiTesterPolicy", b => b.RequireRole("tester"));
});
builder.Services.AddOpenApi();
var app = builder.Build();
app.MapOpenApi()
.RequireAuthorization("ApiTesterPolicy");
app.MapGet("/", () => "Hello world!");
app.Run();
Cachegenererat OpenAPI-dokument
OpenAPI-dokumentet återskapas varje gång en begäran till OpenAPI-slutpunkten skickas. Regenerering gör det möjligt för transformatorer att införliva dynamiskt programtillstånd i sin drift. Till exempel återskapa en begäran med information om HTTP-kontexten. När det är tillämpligt kan OpenAPI-dokumentet cachelagras för att undvika att köra pipelinen för dokumentgenerering på varje HTTP-begäran.
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.OpenApi;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.OpenApi.Models;
var builder = WebApplication.CreateBuilder();
builder.Services.AddOutputCache(options =>
{
options.AddBasePolicy(policy => policy.Expire(TimeSpan.FromMinutes(10)));
});
builder.Services.AddOpenApi();
var app = builder.Build();
app.UseOutputCache();
app.MapOpenApi()
.CacheOutput();
app.MapGet("/", () => "Hello world!");
app.Run();
Generera OpenAPI-dokument vid byggtid
I vanliga webbprogram genereras OpenAPI-dokument vid körning och hanteras via en HTTP-begäran till programservern.
I vissa scenarier är det bra att generera OpenAPI-dokumentet under programmets byggsteg. Dessa scenarier omfattar:
- Generera OpenAPI-dokumentation som har checkats in i källkontrollen.
- Generera OpenAPI-dokumentation som används för specifikationsbaserad integreringstestning.
- Generera OpenAPI-dokumentation som hanteras statiskt från webbservern.
Om du vill lägga till stöd för att generera OpenAPI-dokument vid bygget installerar du Microsoft.Extensions.ApiDescription.Server
-paketet:
Kör följande kommando från Package Manager-konsolen:
Install-Package Microsoft.Extensions.ApiDescription.Server
Vid installationen genererar det här paketet automatiskt de Öppna API-dokument som är associerade med programmet under bygget och fyller i dem i programmets utdatakatalog.
$ dotnet build
$ cat bin/Debug/net9.0/{ProjectName}.json
Anpassa generering av byggtidsdokument
Ändra utdatakatalogen för den genererade Öppna API-filen
Som standard skickas det genererade OpenAPI-dokumentet till programmets utdatakatalog. För att ändra platsen för den genererade filen anger du målsökvägen i egenskapen OpenApiDocumentsDirectory
.
<PropertyGroup>
<OpenApiDocumentsDirectory>./</OpenApiDocumentsDirectory>
</PropertyGroup>
Värdet för OpenApiDocumentsDirectory
bestäms i förhållande till projektfilen. Genom att använda värdet ./
ovan kommer OpenAPI-dokumentet att placeras i samma katalog som projektfilen.
Ändra namnet på utdatafilen
Som standard har det genererade OpenAPI-dokumentet samma namn som programmets projektfil. Om du vill ändra namnet på den utelämnade filen anger du argumentet --file-name
i egenskapen OpenApiGenerateDocumentsOptions
.
<PropertyGroup>
<OpenApiGenerateDocumentsOptions>--file-name my-open-api</OpenApiGenerateDocumentsOptions>
</PropertyGroup>
Välja det OpenAPI-dokument som ska genereras
Vissa program kan konfigureras för att generera flera OpenAPI-dokument, för olika versioner av ett API eller för att skilja mellan offentliga och interna API:er. Som standard genererar byggtidsdokumentgeneratorn filer för alla dokument som har konfigurerats i ett program. Om du bara vill generera ett enda dokumentnamn anger du argumentet --document-name
i egenskapen OpenApiGenerateDocumentsOptions
.
<PropertyGroup>
<OpenApiGenerateDocumentsOptions>--document-name v2</OpenApiGenerateDocumentsOptions>
</PropertyGroup>
Anpassa körningsbeteende under generering av byggtidsdokument
OpenAPI-funktioner för dokumentgenerering vid byggtid genom att starta applikationens startpunkt med en mockserver-implementation. En falsk server krävs för att skapa korrekta OpenAPI-dokument eftersom all information i OpenAPI-dokumentet inte kan analyseras statiskt. Eftersom appinmatningspunkten anropas anropas all logik i appstarten. Detta inkluderar kod som matar in tjänster i DI-containern eller läser från konfigurationen. I vissa scenarier är det nödvändigt att begränsa de kodsökvägar som ska köras när apparnas startpunkt anropas från dokumentgenerering vid byggtid. Dessa scenarier omfattar:
- Läser inte från vissa konfigurationssträngar.
- Registrerar inte databasrelaterade tjänster.
För att begränsa dessa kodvägar från att anropas av byggtidsgenereringspipelinens kan de villkoras bakom en kontroll av inmatningssamlingen.
using System.Reflection;
var builder = WebApplication.CreateBuilder(args);
if (Assembly.GetEntryAssembly()?.GetName().Name != "GetDocument.Insider")
{
builder.AddServiceDefaults();
}
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error", createScopeForErrors: true);
app.UseHsts();
}
var myKeyValue = app.Configuration["MyKey"];
app.MapGet("/", () => {
return Results.Ok($"The value of MyKey is: {myKeyValue}");
})
.WithName("TestKey");
app.Run();
AddServiceDefaults Lägger till vanliga .NET Aspire tjänster som tjänstidentifiering, motståndskraft, hälsokontroller och OpenTelemetry.
Trimning och intern AOT
OpenAPI i ASP.NET Core stöder trimning och intern AOT. Följande steg skapar och publicerar en OpenAPI-app med trimning och inbyggd AOT:
Skapa ett nytt ASP.NET Core Web API-projekt (native AOT).
dotnet new webapiaot
Lägg till Paketet Microsoft.AspNetCore.OpenAPI.
dotnet add package Microsoft.AspNetCore.OpenApi --prerelease
Uppdatera Program.cs
för att aktivera generering av OpenAPI-dokument.
+ builder.Services.AddOpenApi();
var app = builder.Build();
+ app.MapOpenApi();
Publicera appen.
dotnet publish
Minimala API:er ger inbyggt stöd för att generera information om slutpunkter i en app via Microsoft.AspNetCore.OpenApi
-paketet. För att exponera den genererade OpenAPI-definitionen via ett visuellt användargränssnitt krävs ett paket från tredje part. Information om stöd för OpenAPI i kontrollantbaserade API:er finns i .NET 9-versionen av den här artikeln.
Följande kod genereras av ASP.NET Core minimal webb-API-mall och använder OpenAPI:
using Microsoft.AspNetCore.OpenApi;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
var summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
app.MapGet("/weatherforecast", () =>
{
var forecast = Enumerable.Range(1, 5).Select(index =>
new WeatherForecast
(
DateTime.Now.AddDays(index),
Random.Shared.Next(-20, 55),
summaries[Random.Shared.Next(summaries.Length)]
))
.ToArray();
return forecast;
})
.WithName("GetWeatherForecast")
.WithOpenApi();
app.Run();
internal record WeatherForecast(DateTime Date, int TemperatureC, string? Summary)
{
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
}
I föregående markerade kod:
-
Microsoft.AspNetCore.OpenApi
beskrivs i nästa avsnitt. -
AddEndpointsApiExplorer : Konfigurerar appen för att använda API Explorer för att identifiera och beskriva slutpunkter med standardanteckningar.
WithOpenApi
åsidosätter matchning, standardanteckningar som genereras av API Explorer med de som skapas frånMicrosoft.AspNetCore.OpenApi
-paketet. -
UseSwagger
lägger till Swagger-mellanprogram. - "UseSwaggerUI" möjliggör en inbäddad version av Swagger UI-verktyget.
- WithName: IEndpointNameMetadata på slutpunkten används för länkgenerering och behandlas som åtgärds-ID i den angivna slutpunktens OpenAPI-specifikation.
-
WithOpenApi
beskrivs senare i den här artikeln.
Microsoft.AspNetCore.OpenApi
NuGet-paket
ASP.NET Core tillhandahåller Microsoft.AspNetCore.OpenApi
-paketet för att interagera med OpenAPI-specifikationer för slutpunkter. Paketet fungerar som en länk mellan OpenAPI-modellerna som definieras i Microsoft.AspNetCore.OpenApi
-paketet och de slutpunkter som definieras i Minimala API:er. Paketet tillhandahåller ett API som undersöker en slutpunkts parametrar, svar och metadata för att konstruera en OpenAPI-anteckningstyp som används för att beskriva en slutpunkt.
Microsoft.AspNetCore.OpenApi
läggs till som en PackageReference i en projektfil:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="7.0.*-*" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.4.0" />
</ItemGroup>
</Project>
När du använder Swashbuckle.AspNetCore
med Microsoft.AspNetCore.OpenApi
måste Swashbuckle.AspNetCore
6.4.0 eller senare användas.
Microsoft.OpenApi
1.4.3 eller senare måste användas för att utnyttja kopieringskonstruktorer i WithOpenApi
-anrop.
Lägga till OpenAPI-anteckningar i slutpunkter via WithOpenApi
Genom att anropa WithOpenApi
på slutpunkten läggs information till i slutpunktens metadata. Dessa metadata kan vara:
- Förbrukas i tredjepartspaket som Swashbuckle.AspNetCore.
- Visas i Swagger-användargränssnittet eller i YAML eller JSON som genererats för att definiera API:et.
app.MapPost("/todoitems/{id}", async (int id, Todo todo, TodoDb db) =>
{
todo.Id = id;
db.Todos.Add(todo);
await db.SaveChangesAsync();
return Results.Created($"/todoitems/{todo.Id}", todo);
})
.WithOpenApi();
Ändra OpenAPI-kommentaren i WithOpenApi
Metoden WithOpenApi
accepterar en funktion som kan användas för att ändra OpenAPI-kommentaren. I följande kod läggs till exempel en beskrivning till i slutpunktens första parameter:
app.MapPost("/todo2/{id}", async (int id, Todo todo, TodoDb db) =>
{
todo.Id = id;
db.Todos.Add(todo);
await db.SaveChangesAsync();
return Results.Created($"/todoitems/{todo.Id}", todo);
})
.WithOpenApi(generatedOperation =>
{
var parameter = generatedOperation.Parameters[0];
parameter.Description = "The ID associated with the created Todo";
return generatedOperation;
});
Lägga till åtgärds-ID:t i OpenAPI
Åtgärds-ID:er används för att unikt identifiera en viss slutpunkt i OpenAPI. Metoden WithName
tillägg kan användas för att ange det åtgärds-ID som används för en metod.
app.MapGet("/todoitems2", async (TodoDb db) =>
await db.Todos.ToListAsync())
.WithName("GetToDoItems");
Du kan också ange egenskapen OperationId
direkt i OpenAPI-kommentaren.
app.MapGet("/todos", async (TodoDb db) => await db.Todos.ToListAsync())
.WithOpenApi(operation => new(operation)
{
OperationId = "GetTodos"
});
Lägga till taggar i OpenAPI-beskrivningen
OpenAPI stöder användning av taggobjekt för att kategorisera åtgärder. Dessa taggar används vanligtvis för att gruppera åtgärder i Swagger-användargränssnittet. Dessa taggar kan läggas till i en åtgärd genom att anropa metoden WithTags-tillägg på slutpunkten med önskade taggar.
app.MapGet("/todoitems", async (TodoDb db) =>
await db.Todos.ToListAsync())
.WithTags("TodoGroup");
Du kan också ange listan över OpenApiTags
i OpenAPI-kommentaren via WithOpenApi
-tilläggsmetoden.
app.MapGet("/todos", async (TodoDb db) => await db.Todos.ToListAsync())
.WithOpenApi(operation => new(operation)
{
Tags = new List<OpenApiTag> { new() { Name = "Todos" } }
});
Lägg till sammanfattning eller beskrivning av slutpunkt
Slutpunktssammanfattningen och beskrivningen kan läggas till genom att anropa WithOpenApi
-tilläggsmetoden. I följande kod anges sammanfattningarna direkt i OpenAPI-kommentaren.
app.MapGet("/todoitems2", async (TodoDb db) => await db.Todos.ToListAsync())
.WithOpenApi(operation => new(operation)
{
Summary = "This is a summary",
Description = "This is a description"
});
Exkludera OpenAPI-beskrivning
I följande exempel utesluts slutpunkten /skipme
från att generera en OpenAPI-beskrivning.
using Microsoft.AspNetCore.OpenApi;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.MapGet("/swag", () => "Hello Swagger!")
.WithOpenApi();
app.MapGet("/skipme", () => "Skipping Swagger.")
.ExcludeFromDescription();
app.Run();
Markera ett API som föråldrat
Om du vill markera en slutpunkt som föråldrad anger du egenskapen Deprecated
på OpenAPI-kommentaren.
app.MapGet("/todos", async (TodoDb db) => await db.Todos.ToListAsync())
.WithOpenApi(operation => new(operation)
{
Deprecated = true
});
Beskriva svarstyper
OpenAPI har stöd för att tillhandahålla en beskrivning av svaren som returneras från ett API. Minimala API:er stöder tre strategier för att ange svarstypen för en slutpunkt:
- Via
Produces
-tilläggsmetoden på slutpunkten - Via attributet
ProducesResponseType
på routningshanteraren - Genom att returnera
TypedResults
från routningshanteraren
Tilläggsmetoden Produces
kan användas för att lägga till Produces
-metadata till en slutpunkt. När inga parametrar anges fyller tilläggsmetoden metadata för måltypen under en 200
statuskod och en application/json
innehållstyp.
app
.MapGet("/todos", async (TodoDb db) => await db.Todos.ToListAsync())
.Produces<IList<Todo>>();
Användning av TypedResults
i implementeringen av en slutpunkts routningshanterare innehåller automatiskt metadata för svarstyp för slutpunkten. Följande kod kommenterar till exempel automatiskt slutpunkten med ett svar under statuskoden 200
med en application/json
innehållstyp.
app.MapGet("/todos", async (TodoDb db) =>
{
var todos = await db.Todos.ToListAsync());
return TypedResults.Ok(todos);
});
Ange svar för ProblemDetails
När du anger svarstypen för slutpunkter som kan returnera ett ProblemDetails-svar kan ProducesProblem-tilläggsmetoden ProducesValidationProblemeller TypedResults.Problem
användas för att lägga till lämplig anteckning i slutpunktens metadata. Observera att ProducesProblem
- och ProducesValidationProblem
-tilläggsmetoderna inte kan användas med routningsgrupper i .NET 8 och tidigare.
När det inte finns några explicita anteckningar från någon av strategierna ovan försöker ramverket fastställa en standardsvarstyp genom att undersöka svarets signatur. Det här standardsvaret fylls i under statuskoden 200
i OpenAPI-definitionen.
Flera svarstyper
Om en slutpunkt kan returnera olika svarstyper i olika scenarier kan du ange metadata på följande sätt:
Anropa
Produces
-tilläggsmetoden flera gånger, som du ser i följande exempel:app.MapGet("/api/todoitems/{id}", async (int id, TodoDb db) => await db.Todos.FindAsync(id) is Todo todo ? Results.Ok(todo) : Results.NotFound()) .Produces<Todo>(StatusCodes.Status200OK) .Produces(StatusCodes.Status404NotFound);
Använd
Results<TResult1,TResult2,TResultN>
i signaturen ochTypedResults
i hanterarens brödtext, som du ser i följande exempel:app.MapGet("/book/{id}", Results<Ok<Book>, NotFound> (int id, List<Book> bookList) => { return bookList.FirstOrDefault((i) => i.Id == id) is Book book ? TypedResults.Ok(book) : TypedResults.NotFound(); });
De
Results<TResult1,TResult2,TResultN>
unionstyper deklarerar att en routningshanterare returnerar flera konkreta typer som implementerarIResult
, och var och en av de typer som implementerarIEndpointMetadataProvider
kommer att bidra till slutpunktens metadata.Union-typerna implementerar implicita cast-operatorer. Dessa operatorer gör det möjligt för kompilatorn att automatiskt konvertera de typer som anges i de allmänna argumenten till en instans av unionstypen. Den här funktionen har den extra fördelen att tillhandahålla kompileringstidskontroll att en routningshanterare endast returnerar de resultat som den deklarerar att den gör. Försök att returnera en typ som inte deklareras som ett av de allmänna argumenten för att
Results<TResult1,TResult2,TResultN>
resulterar i ett kompileringsfel.
Beskriva begärandetext och parametrar
Förutom att beskriva de typer som returneras av en slutpunkt har OpenAPI även stöd för att kommentera indata som används av ett API. Dessa indata delas in i två kategorier:
- Parametrar som visas i sökvägen, frågesträngen, rubrikerna eller cookies
- Data som överförs som en del av begärandetexten
Ramverket härleder typerna för begäransparametrar i sökvägen, frågan och huvudsträngen automatiskt baserat på väghanterarens signatur.
Om du vill definiera vilken typ av indata som skickas som begärandetext konfigurerar du egenskaperna med hjälp av metoden Accepts
tillägg för att definiera den objekttyp och innehållstyp som förväntas av begärandehanteraren. I följande exempel accepterar slutpunkten ett Todo
objekt i begärandetexten med en förväntad innehållstyp av application/xml
.
app.MapPost("/todos/{id}", (int id, Todo todo) => ...)
.Accepts<Todo>("application/xml");
Utöver Accepts
-tilläggsmetoden kan en parametertyp beskriva sin egen anteckning genom att implementera IEndpointParameterMetadataProvider
-gränssnittet. Följande Todo
typ lägger till en anteckning som kräver en begärandetext med en application/xml
innehållstyp.
public class Todo : IEndpointParameterMetadataProvider
{
public static void PopulateMetadata(ParameterInfo parameter, EndpointBuilder builder)
{
builder.Metadata.Add(new ConsumesAttribute(typeof(Todo), isOptional: false, "application/xml"));
}
}
När ingen explicit anteckning har angetts försöker ramverket fastställa standardtypen för begäran om det finns en parameter för begärandetext i slutpunktshanteraren. Slutsatsdragningen använder följande heuristik för att skapa kommentaren:
- Brödtextparametrar för begäran som läss från ett formulär via attributet
[FromForm]
beskrivs medmultipart/form-data
innehållstyp. - Alla andra parametrar för begärandetext beskrivs med
application/json
innehållstyp. - Begärandetexten behandlas som valfri om den är nullbar eller om egenskapen
AllowEmpty
har angetts för attributetFromBody
.
Stöd för API-versionshantering
Minimala API:er stöder API-versionshantering via Asp.Versioning.Http-paketet. Exempel på hur du konfigurerar versionshantering med minimala API:er finns i lagringsplatsen för API-versionshantering.
ASP.NET Core OpenAPI-källkod på GitHub
Ytterligare resurser
En minimal API-app kan beskriva OpenAPI-specifikationen för routningshanterare med hjälp av Swashbuckle.
Information om stöd för OpenAPI i kontrollantbaserade API:er finns i .NET 9-versionen av den här artikeln.
Följande kod är en typisk ASP.NET Core-app med OpenAPI-stöd:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new() { Title = builder.Environment.ApplicationName,
Version = "v1" });
});
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseSwagger(); // UseSwaggerUI Protected by if (env.IsDevelopment())
app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json",
$"{builder.Environment.ApplicationName} v1"));
}
app.MapGet("/swag", () => "Hello Swagger!");
app.Run();
Exkludera OpenAPI-beskrivning
I följande exempel undantas slutpunkt /skipme
från att generera en OpenAPI-beskrivning.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI(); // UseSwaggerUI Protected by if (env.IsDevelopment())
}
app.MapGet("/swag", () => "Hello Swagger!");
app.MapGet("/skipme", () => "Skipping Swagger.")
.ExcludeFromDescription();
app.Run();
Beskriva svarstyper
I följande exempel används de inbyggda resultattyperna för att anpassa svaret:
app.MapGet("/api/todoitems/{id}", async (int id, TodoDb db) =>
await db.Todos.FindAsync(id)
is Todo todo
? Results.Ok(todo)
: Results.NotFound())
.Produces<Todo>(StatusCodes.Status200OK)
.Produces(StatusCodes.Status404NotFound);
Lägga till åtgärds-ID:t i OpenAPI
app.MapGet("/todoitems2", async (TodoDb db) =>
await db.Todos.ToListAsync())
.WithName("GetToDoItems");
Lägga till taggar i OpenAPI-beskrivningen
Följande kod använder en OpenAPI-grupperingstagg:
app.MapGet("/todoitems", async (TodoDb db) =>
await db.Todos.ToListAsync())
.WithTags("TodoGroup");
ASP.NET Core