Megosztás a következőn keresztül:


OpenAPI-dokumentumok létrehozása

A Microsoft.AspNetCore.OpenApi csomag beépített támogatást nyújt az OpenAPI-dokumentumkészítéshez a ASP.NET Core-ban. A csomag a következő funkciókat biztosítja:

  • OpenAPI 3.1-es verziójú dokumentumok létrehozásának támogatása.
  • A JSON-séma 2020–2012-ben készült vázlatának támogatása.
  • OpenAPI-dokumentumok futásidőben történő létrehozásának és az alkalmazás végpontján keresztüli elérésének támogatása.
  • Az "átalakító" API-k támogatása, amelyek lehetővé teszik a létrehozott dokumentum módosítását.
  • Több OpenAPI-dokumentum egyetlen alkalmazásból történő létrehozásának támogatása.
  • Kihasználja a System.Text.Jsonáltal biztosított JSON-sématámogatást.
  • Kompatibilis a natív AoT-vel.

A létrehozott dokumentumok alapértelmezett OpenAPI-verziója a 3.1. A verzió módosítható azáltal, hogy explicit módon beállítjuk a OpenApiVersionOpenApiOptions delegált paraméterének configureOptionsAddOpenApi tulajdonságát.

builder.Services.AddOpenApi(options =>
{
    // Specify the OpenAPI version to use
    options.OpenApiVersion = Microsoft.OpenApi.OpenApiSpecVersion.OpenApi3_0;
});

Az OpenAPI dokumentum generálásakor összeállítási időben az OpenAPI verzió a --openapi-version MSBuild elemben található OpenApiGenerateDocumentsOptions beállításával választható ki.

<!-- Configure build-time OpenAPI generation to produce an OpenAPI 3.1 document -->
<OpenApiGenerateDocumentsOptions>
  --openapi-version OpenApi3_1
</OpenApiGenerateDocumentsOptions>

Csomag telepítése

Telepítse a Microsoft.AspNetCore.OpenApi csomagot:

A következő parancsot a Package Manager Konzol-ból futtassa:

Install-Package Microsoft.AspNetCore.OpenApi

OpenAPI-dokumentumlétrehozás konfigurálása

A következő kód:

  • OpenAPI-szolgáltatásokat ad hozzá az alkalmazásszerkesztő szolgáltatásgyűjteményének AddOpenApi bővítménymetódusával.
  • Leképzi az OpenAPI-dokumentum JSON formátumban való megtekintésére szolgáló végpontot az alkalmazás MapOpenApi bővítménymetódusával.
var builder = WebApplication.CreateBuilder();

builder.Services.AddOpenApi();

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.MapOpenApi();
}

app.MapGet("/", () => "Hello world!");

app.Run();

Indítsa el az alkalmazást, és haladjon a https://localhost:{port}/openapi/v1.json felé a létrehozott OpenAPI-dokumentum megtekintéséhez, ahol a {port} helyőrző a port.

Az OpenAPI-dokumentumok létrehozásának testreszabása

Az alábbi szakaszok bemutatják, hogyan szabhatja testre az OpenAPI-dokumentumok létrehozását.

OpenAPI-dokumentum létrehozása YAML formátumban

Az OpenAPI-dokumentum JSON vagy YAML formátumban is létrehozható. Alapértelmezés szerint az OpenAPI-dokumentum JSON formátumban jön létre. Az OpenAPI-dokumentum YAML formátumban való létrehozásához adja meg a MapOpenApi hívás végpontját egy ".yaml" vagy ".yml" utótaggal, ahogyan az alábbi példában látható, ahol a {documentName} helyőrző a dokumentum neve:

app.MapOpenApi("/openapi/{documentName}.yaml");

Az OpenAPI-dokumentumok yaML formátumban történő létrehozása nem támogatott, de jövőbeli előzetes verzióra tervezett.

Az OpenAPI-dokumentum nevének testreszabása

Az alkalmazás minden OpenAPI-dokumentumának egyedi neve van. A regisztrált alapértelmezett dokumentumnév a következő v1:

builder.Services.AddOpenApi(); // Document name is v1

A dokumentum neve úgy módosítható, hogy paraméterként adja át a nevet a AddOpenApi hívásnak:

builder.Services.AddOpenApi("internal"); // Document name is internal

A dokumentum neve több helyen is megjelenik az OpenAPI-implementációban.

A létrehozott OpenAPI-dokumentum lekérésekor a rendszer a dokumentum nevét adja meg a kérelem documentName paraméterargumentumaként. Az alábbi kérések feloldják a v1 és internal dokumentumokat.

GET http://localhost:5000/openapi/v1.json
GET http://localhost:5000/openapi/internal.json

Létrehozott dokumentum OpenAPI-verziójának testreszabása

Az OpenAPI-dokumentum létrehozása alapértelmezés szerint létrehoz egy, az OpenAPI-specifikációnak megfelelő dokumentumot. Az alábbi kód bemutatja, hogyan módosíthatja az OpenAPI-dokumentum alapértelmezett verzióját:

builder.Services.AddOpenApi(options =>
{
    options.OpenApiVersion = OpenApiSpecVersion.OpenApi3_0;
});

Az OpenAPI-végpont útvonalának testreszabása

Alapértelmezés szerint a MapOpenApi hívással regisztrált OpenAPI-végpont a /openapi/{documentName}.json végponton teszi elérhetővé a dokumentumot. Az alábbi kód bemutatja, hogyan szabhatja testre azt az útvonalat, amelyen az OpenAPI-dokumentum regisztrálva van:

app.MapOpenApi("/openapi/{documentName}/openapi.json");

Lehetséges, de nem ajánlott eltávolítani a documentName útvonalparamétert a végpontútvonalról. Amikor a documentName útvonalparaméter el lesz távolítva a végpontútvonalról, a keretrendszer megpróbálja feloldani a dokumentum nevét a lekérdezési paraméterből. Ha nem adja meg a documentName sem az útvonalban, sem a lekérdezésben, az váratlan viselkedést eredményezhet.

Az OpenAPI-végpont testreszabása

Mivel az OpenAPI-dokumentumot egy útvonalkezelő végponton keresztül kézbesítik, a standard minimális végpontok számára elérhető testreszabások az OpenAPI-végpont számára érhetők el.

OpenAPI-dokumentumhozzáférés korlátozása jogosult felhasználók számára

Az OpenAPI-végpont alapértelmezés szerint nem engedélyezi az engedélyezési ellenőrzéseket. Az engedélyezési ellenőrzések azonban alkalmazhatók az OpenAPI-dokumentumra. A következő kódban az OpenAPI-dokumentumhoz való hozzáférés a szerepkörrel rendelkező tester felhasználókra korlátozódik:

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();

Gyorsítótárazott OpenAPI-dokumentum

Az OpenAPI-dokumentum minden alkalommal újra létrejön, amikor a rendszer kérést küld az OpenAPI-végpontnak. A regeneráció lehetővé teszi, hogy a transzformátorok dinamikus alkalmazásállapotokat építsenek be a működésükbe. Például egy kérés újragenerálása a HTTP-környezet részleteivel. Adott esetben az OpenAPI-dokumentum gyorsítótárazható, hogy ne hajtsa végre a dokumentumlétrehozási folyamatot minden HTTP-kérésen.

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();

if (app.Environment.IsDevelopment())
{
    app.MapOpenApi()
        .CacheOutput();
}

app.MapGet("/", () => "Hello world!");

app.Run();

Több OpenAPI-dokumentum létrehozása

Bizonyos esetekben hasznos lehet több OpenAPI-dokumentum létrehozása egyetlen ASP.NET Core API-alkalmazástól eltérő tartalommal. Ilyen forgatókönyvek például az OpenAPI-dokumentáció létrehozása különböző esetekben:

  • Célközönségek, például nyilvános és belső API-k.
  • API-k verziói.
  • Az alkalmazás részei, például egy előtér- és háttér API.

Több OpenAPI-dokumentum létrehozásához minden dokumentumhoz egyszer hívja meg a AddOpenApi bővítménymetódust, és minden alkalommal adjon meg egy másik dokumentumnevet az első paraméterben.

builder.Services.AddOpenApi("v1");
builder.Services.AddOpenApi("v2");

Minden egyes meghívás AddOpenApi megadhatja a saját beállításkészletét, így minden OpenAPI-dokumentumhoz ugyanazt vagy különböző testreszabást használhatja.

A keretrendszer a ShouldIncludeOpenApiOptions delegálási módszerét használja annak meghatározására, hogy mely végpontokat vegye fel az egyes dokumentumokba.

Minden dokumentum esetében a ShouldInclude delegálási metódust hívja meg az alkalmazás minden végpontja, és átadja a végpont ApiDescription objektumát. A metódus logikai értéket ad vissza, amely jelzi, hogy a végpont szerepeljen-e a dokumentumban. Az ApiDescription objektum:

  • Információkat tartalmaz a végpontról, például a HTTP-metódusról, az útvonalról és a választípusokról.
  • A végponthoz attribútumokkal vagy kiterjesztési metódusokkal csatolt metaadatok.

A delegátus alapértelmezett implementációja a GroupNameApiDescription mezőjét használja. A delegált egy végponton van beállítva a WithGroupName bővítménymetódus vagy a EndpointGroupNameAttribute attribútum használatával. WithGroupName vagy a EndpointGroupName attribútum határozza meg, hogy mely végpontok szerepeljenek a dokumentumban. A csoportnévvel nem rendelkező végpontok szerepelnek az összes OpenAPI-dokumentumban.

// Include endpoints without a group name or with a group name
// that matches the document name
ShouldInclude = (description) => description.GroupName == null || 
    description.GroupName == DocumentName;    

A delegálási ShouldInclude metódust testre szabhatja úgy, hogy a végpontokat bármilyen feltétel alapján belefoglalja vagy kizárja.

OpenAPI-dokumentumok létrehozása a létrehozáskor

A tipikus webalkalmazásokban az OpenAPI-dokumentumok futásidőben jönnek létre, és egy HTTP-kérésen keresztül kézbesítik az alkalmazáskiszolgálónak.

Bizonyos esetekben hasznos az OpenAPI-dokumentum létrehozása az alkalmazás buildelési lépése során. Ilyen forgatókönyvek például az OpenAPI-dokumentáció létrehozása, amely a következő:

  • Berögzítve a verziókezelésbe.
  • Spec-alapú integrációs teszteléshez használatos.
  • Statikusan kiszolgálva a webkiszolgálóról.

Ha támogatni szeretné az OpenAPI-dokumentumok létrehozását a létrehozáskor, telepítse a Microsoft.Extensions.ApiDescription.Server csomagot:

A következő parancsot a Package Manager Konzol-ból futtassa:

Install-Package Microsoft.Extensions.ApiDescription.Server

Telepítéskor ez a csomag:

  • Automatikusan létrehozza az alkalmazáshoz társított Open API-dokumentumokat a buildelés során.
  • Kitölti az Open API-dokumentumokat az alkalmazás kimeneti könyvtárában.

Ha több dokumentum van regisztrálva és a dokumentum neve nem szerepelv1, a projekt neve utótagként lesz hozzáadva a dokumentum nevével. Példa: {ProjectName}_{DocumentName}.json. A {ProjectName} helyőrző a projekt neve, a {DocumentName} helyőrző pedig a dokumentum neve.

dotnet build
type obj\{ProjectName}.json

Build-time OpenAPI-naplók megtekintése (Terminálnaplózó)

A Microsoft.Extensions.ApiDescription.Server lépés GetDocument futtatásakor a dotnet build folyamatjelző üzenetek nem láthatók a .NET-terminálnaplózóval alapértelmezett részletességgel a .NET 8-as vagy újabb verziójában. Ezeknek az üzeneteknek az összeállítás során való felszínre hozásához használja az alábbi lehetőségek egyikét a dotnet build paranccsal.

A Terminálnaplózó részletességét állítsa be a -tlp opció v=d értékére (részletesség = részletes)

dotnet build -tlp:v=d

Tiltsa le a Terminálnaplózót, és használja az örökölt típusú naplókat a --tl következő beállítássaloff:

dotnet build --tl:off

Buildelési idő dokumentumgenerálásának testreszabása

A létrehozott Open API-fájl kimeneti könyvtárának módosítása

Alapértelmezés szerint a létrehozott OpenAPI-dokumentum ki lesz bocsátva az alkalmazás kimeneti könyvtárába. A kibocsátott fájl helyének módosításához állítsa be a cél elérési útját a OpenApiDocumentsDirectory tulajdonságban:

<PropertyGroup>
  <OpenApiDocumentsDirectory>.</OpenApiDocumentsDirectory>
</PropertyGroup>

A OpenApiDocumentsDirectory értéke a projektfájlhoz képest határozható meg. . Az előző példában látható érték használatával az OpenAPI-dokumentumot ugyanabban a könyvtárban bocsátja ki, mint a projektfájl.

A kimeneti fájl nevének módosítása

Alapértelmezés szerint a létrehozott OpenAPI-dokumentum neve megegyezik az alkalmazás projektfájljával. A kibocsátott fájl nevének módosításához állítsa be az --file-name argumentumot a OpenApiGenerateDocumentsOptions tulajdonságban:

<PropertyGroup>
  <OpenApiGenerateDocumentsOptions>
    --file-name my-open-api
  </OpenApiGenerateDocumentsOptions>
</PropertyGroup>

Válassza ki a létrehozandó OpenAPI-dokumentumot

Egyes alkalmazások több OpenAPI-dokumentum kibocsátására is konfigurálhatók. Több OpenAPI-dokumentum is létrehozható egy API különböző verzióihoz, illetve a nyilvános és a belső API-k megkülönböztetéséhez. Alapértelmezés szerint a buildelési idő dokumentumgenerátora az alkalmazásban konfigurált összes dokumentum fájljait bocsátja ki. Ha csak egyetlen dokumentumnevet szeretne kibocsátani, állítsa be az --document-name argumentumot a OpenApiGenerateDocumentsOptions tulajdonságban:

<PropertyGroup>
  <OpenApiGenerateDocumentsOptions>
    --document-name v2
  </OpenApiGenerateDocumentsOptions>
</PropertyGroup>

A futási környezet viselkedésének testreszabása a buildidőben történő dokumentumgenerálás során

A buildelési idejű OpenAPI-dokumentumlétrehozási funkciók az alkalmazások belépési pontjának egy makettkiszolgáló-implementációval történő elindításával működnek. A modellkiszolgálóknak pontos OpenAPI-dokumentumokat kell létrehozniuk, mert az OpenAPI-dokumentum összes információja nem elemezhető statikusan. Mivel a rendszer meghívja az alkalmazások belépési pontját, a rendszer meghívja az alkalmazások indítási logikáját. Ez magában foglalja azt a kódot, amely szolgáltatásokat injektál a DI tárolóba vagy olvas be konfigurációból. Bizonyos esetekben korlátozni kell a kódútvonalakat, amikor az alkalmazás belépési pontját buildidőben történő dokumentumgenerálásból hívják meg. Ezek a forgatókönyvek a következők:

  • Nem olvassa a bizonyos konfigurációs karakterláncokat.
  • Nem regisztrál adatbázissal kapcsolatos szolgáltatásokat.

Annak érdekében, hogy a build idején történő generálási folyamat korlátozza ezen kódútvonalak meghívását, feltételekhez köthetők az entry assembly ellenőrzése alapján.

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 Olyan gyakori Aspire szolgáltatásokat ad hozzá, mint a szolgáltatásfelderítés, a rugalmasság, az állapotellenőrzések és az OpenTelemetria.

Vágás és natív AOT futtatás

Az OpenAPI a ASP.NET Core-ban támogatja a vágást és a natív AOT-t. Az alábbi lépések egy OpenAPI-alkalmazást hoznak létre és tesznek közzé vágással és natív AOT-val.

Hozzon létre egy új ASP.NET Core Web API-projektet (natív AOT):

dotnet new webapiaot

Az alkalmazás közzététele:

dotnet publish

A minimális API-k beépített támogatást nyújtanak az alkalmazások végpontjaival kapcsolatos információk Microsoft.AspNetCore.OpenApi csomagon keresztüli létrehozásához. A létrehozott OpenAPI-definíció vizuális felhasználói felületen keresztül történő felfedéséhez külső csomagra van szükség. Az OpenAPI vezérlőalapú API-k támogatásáról a cikk .NET 9-es verziójábantalál információt.

A következő kódot a ASP.NET Core minimális webes API-sablonja hozza létre, és OpenAPI-t használ:

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);
}

Az előző kiemelt kódban:

  • Microsoft.AspNetCore.OpenApi a következő szakaszban ismertetik.
  • AddEndpointsApiExplorer: Úgy konfigurálja az alkalmazást, hogy az API Explorer használatával felderítse és leírja a végpontokat alapértelmezett széljegyzetekkel. WithOpenApi felülbírálja az API Explorer által létrehozott, az Microsoft.AspNetCore.OpenApi csomagból előállítottakkal egyező, alapértelmezett széljegyzeteket.
  • UseSwaggerhozzáadja a Swagger köztes réteget.
  • "UseSwaggerUI" lehetővé teszi a Swagger felhasználói felületi eszköz beágyazott verzióját.
  • WithName: A végponton lévő IEndpointNameMetadata a kapcsolat létrehozásához használják, és az adott végpont OpenAPI-specifikációjában műveletazonosítóként kezelik.
  • A WithOpenApi-t a cikk későbbi részében később ismertetik.

Microsoft.AspNetCore.OpenApi NuGet-csomag

ASP.NET Core biztosítja a Microsoft.AspNetCore.OpenApi csomagot a végpontok OpenAPI-specifikációinak használatához. A csomag a Microsoft.AspNetCore.OpenApi csomagban definiált OpenAPI-modellek és a minimális API-kban definiált végpontok közötti kapcsolatként működik. A csomag egy OLYAN API-t biztosít, amely megvizsgálja a végpont paramétereit, válaszait és metaadatait, és létrehoz egy OpenAPI-széljegyzettípust, amely egy végpont leírására szolgál.

Microsoft.AspNetCore.OpenApi PackageReference-fájlként van hozzáadva egy projektfájlhoz:

<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>

Ha a Swashbuckle.AspNetCore-t és a Microsoft.AspNetCore.OpenApi-t használja, akkor a Swashbuckle.AspNetCore 6.4.0-s vagy újabb verzióját kell használni. A másoláskonstruktorok használatához Microsoft.OpenApi hívások során WithOpenApi 1.4.3 vagy újabb verziót kell alkalmazni.

OpenAPI annotációk hozzáadása a végpontokhoz WithOpenApi

A végponton WithOpenApi hívása hozzáadja a végpont metaadatait. Ezek a metaadatok a következőek lehetnek:

  • Harmadik fél által használt csomagokban, mint például Swashbuckle.AspNetCore.
  • Megjelenik a Swagger felhasználói felületén, illetve az API definiálásához létrehozott YAML-ben vagy JSON-ban.
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();

Módosítsa az OpenAPI-annotációt a WithOpenApi pontban.

A WithOpenApi metódus olyan függvényt fogad el, amely az OpenAPI-széljegyzet módosítására használható. A következő kódban például egy leírást ad hozzá a végpont első paraméteréhez:

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;
});

Műveletazonosítók hozzáadása az OpenAPI-hoz

A műveleti azonosítók egy adott végpont egyedi azonosítására szolgálnak az OpenAPI-ban. A WithName bővítménymetódus használható a metódushoz használt műveletazonosító beállításához.

app.MapGet("/todoitems2", async (TodoDb db) =>
    await db.Todos.ToListAsync())
    .WithName("GetToDoItems");

Másik lehetőségként a OperationId tulajdonság közvetlenül az OpenAPI-széljegyzeten állítható be.

app.MapGet("/todos", async (TodoDb db) => await db.Todos.ToListAsync())
    .WithOpenApi(operation => new(operation)
    {
        OperationId = "GetTodos"
    });

Címkék hozzáadása az OpenAPI-leíráshoz

Az OpenAPI támogatja címkék objektumainak használatát a műveletek kategorizálásához. Ezeket a címkéket általában a Swagger felhasználói felületén végzett műveletek csoportosítására használják. Ezek a címkék hozzáadhatók egy művelethez a WithTags bővítménymetódus meghívásával a végponton a kívánt címkékkel.

app.MapGet("/todoitems", async (TodoDb db) =>
    await db.Todos.ToListAsync())
    .WithTags("TodoGroup");

Másik lehetőségként a OpenApiTags listája beállítható az OpenAPI-széljegyzeten a WithOpenApi bővítménymetóduson keresztül.

app.MapGet("/todos", async (TodoDb db) => await db.Todos.ToListAsync())
    .WithOpenApi(operation => new(operation)
    {
        Tags = new List<OpenApiTag> { new() { Name = "Todos" } }
    });

Végpont összegzésének vagy leírásának hozzáadása

A végpont összegzése és leírása a WithOpenApi bővítménymetódus meghívásával adható hozzá. Az alábbi kódban az összefoglalók közvetlenül az OpenAPI-megjegyzésen vannak beállítva.

app.MapGet("/todoitems2", async (TodoDb db) => await db.Todos.ToListAsync())
    .WithOpenApi(operation => new(operation)
    {
        Summary = "This is a summary",
        Description = "This is a description"
    });

OpenAPI-leírás kizárása

A következő példában a /skipme végpont ki van zárva az OpenAPI-leírásból:

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();

Az API elavultként való megjelölése

Ha elavultként szeretne megjelölni egy végpontot, állítsa be a Deprecated tulajdonságot az OpenAPI-széljegyzeten.

app.MapGet("/todos", async (TodoDb db) => await db.Todos.ToListAsync())
    .WithOpenApi(operation => new(operation)
    {
        Deprecated = true
    });

Választípusok leírása

Az OpenAPI támogatja az API-ból visszaadott válaszok leírását. A minimális API-k három stratégiát támogatnak a végpont választípusának beállításához:

A Produces bővítménymetódus Produces metaadatok végponthoz való hozzáadására használható. Ha nincsenek megadva paraméterek, a bővítménymetódus egy 200 állapotkód és egy application/json tartalomtípus alatt tölti fel a megcélzott típus metaadatait.

app
    .MapGet("/todos", async (TodoDb db) => await db.Todos.ToListAsync())
    .Produces<IList<Todo>>();

A végpont útválasztó kezelőjének implementálásában a TypedResults automatikusan tartalmazza a válasz típusának metaadatait. Az alábbi kód például automatikusan jelöli a végpontot egy válasszal a 200 állapotkód alatt és egy application/json tartalomtípussal.

app.MapGet("/todos", async (TodoDb db) =>
{
    var todos = await db.Todos.ToListAsync());
    return TypedResults.Ok(todos);
});

Állítsa be a válaszokat ProblemDetails

A ProblemDetails-választ visszaadó végpontok választípusának beállításakor a ProducesProblem bővítménymetódus, ProducesValidationProblemvagy TypedResults.Problem használható a megfelelő széljegyzet hozzáadásához a végpont metaadataihoz. Vegye figyelembe, hogy a ProducesProblem és ProducesValidationProblem kiterjesztési metódusok nem használhatók útvonalcsoportokkal a .NET 8 vagy korábbi verzióiban.

Ha a fenti stratégiák egyikében nincsenek explicit megjegyzések, a keretrendszer megkísérli meghatározni az alapértelmezett választípust a válasz aláírásának vizsgálatával. Ez az alapértelmezett válasz az OpenAPI-definíció 200 állapotkódja alatt van feltöltve.

Több választípus

Ha egy végpont különböző választípusokat tud visszaadni különböző helyzetekben, a metaadatokat a következő módokon adhatja meg:

  • Hívja meg többször a Produces bővítménymetódust az alábbi példában látható módon:

    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);
    
  • Használja a(z) Results<TResult1,TResult2,TResultN> az aláírásban és a TypedResults-et a kezelő törzsében az alábbi példa szerint:

    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();
        });
    

    Az Results<TResult1,TResult2,TResultN>egyesítő típusok deklarálják, hogy egy útvonalkezelő több IResult-implementáló konkrét típust ad vissza, és a IEndpointMetadataProvider implementáló típusok bármelyike hozzájárul a végpont metaadataihoz.

    Az egyesítő típusok implicit konverziós műveleteket implementálnak. Ezek az operátorok lehetővé teszik, hogy a fordító automatikusan átalakítsa az általános argumentumokban megadott típusokat az egyesítő típus egy példányává. Ennek a funkciónak az a előnye, hogy fordítási időt biztosít annak ellenőrzéséhez, hogy egy útvonalkezelő csak az általa deklarált eredményeket adja vissza. Ha vissza próbál adni egy olyan típust, amely nincs deklarálva az általános argumentumok között Results<TResult1,TResult2,TResultN>-ban, fordítási hibát eredményez.

A kérelem törzsének és paramétereinek leírása

A végpont által visszaadott típusok leírásán kívül az OpenAPI támogatja az API által felhasznált bemenetek megjegyzését is. Ezek a bemenetek két kategóriába sorolhatók:

  • Az elérési úton, lekérdezési sztringben, fejlécekben vagy cookie-kban megjelenő paraméterek
  • A kérelem törzsének részeként továbbított adatok

A keretrendszer az útvonal-, lekérdezés- és fejlécsztring kérésparamétereinek típusait az útvonalkezelő aláírása alapján automatikusan leköveti.

A kérelemtörzsként továbbított bemenetek típusának meghatározásához konfigurálja a tulajdonságokat a Accepts bővítménymetódussal a kérelemkezelő által elvárt objektumtípus és tartalomtípus meghatározásához. Az alábbi példában a végpont egy Todo objektumot fogad el a kérelem törzsében, a várt tartalomtípus pedig application/xml.

app.MapPost("/todos/{id}", (int id, Todo todo) => ...)
  .Accepts<Todo>("application/xml");

A Accepts bővítménymetódus mellett egy paramétertípus a IEndpointParameterMetadataProvider interfész implementálásával is leírhatja saját jegyzeteit. Az alábbi Todo típus például egy olyan megjegyzést ad hozzá, amely egy application/xml tartalomtípusú kérelemtörzset igényel.

public class Todo : IEndpointParameterMetadataProvider
{
    public static void PopulateMetadata(ParameterInfo parameter, EndpointBuilder builder)
    {
        builder.Metadata.Add(new ConsumesAttribute(typeof(Todo), isOptional: false, "application/xml"));
    }
}

Ha nincs megadva explicit megjegyzés, a keretrendszer megkísérli meghatározni az alapértelmezett kéréstípust, ha a végpontkezelőben van egy kérelemtörzs-paraméter. A következtetés a következő heurisztika használatával hozza létre a széljegyzetet:

  • Az űrlapokból a [FromForm] attribútumon keresztül beolvasott kérelem törzsparamétereit a multipart/form-data tartalomtípus ismerteti.
  • Az összes többi kérelem törzsparaméterét a application/json tartalomtípus ismerteti.
  • A kérelem törzsét nem kötelezőként kezelik, ha null értékű, vagy ha a AllowEmpty tulajdonság a FromBody attribútumon van beállítva.

Az API verziószámozásának támogatása

A minimális API-k támogatják az API-verziószámozást az Asp.Versioning.Http-csomagon keresztül. Példákat találhatunk a verziószámozás konfigurálására minimális API-k használatával az API verziószámozási tárházban .

ASP.NET Core OpenAPI-forráskód a GitHubon

További források

Egy minimális API-alkalmazás a Swashbuckle segítségével írja le a OpenAPI-specifikációt az útvonalkezelők számára.

Az OpenAPI vezérlőalapú API-k támogatásáról a cikk .NET 9-es verziójábantalál információt.

Az alábbi kód egy tipikus ASP.NET Core-alkalmazás OpenAPI-támogatással:

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();

OpenAPI-leírás kizárása

A következő példában a /skipme végpont ki van zárva az OpenAPI-leírásból:

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();

Választípusok leírása

Az alábbi példa a beépített eredménytípusokat használja a válasz testreszabásához:

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);

Műveletazonosítók hozzáadása az OpenAPI-hoz

app.MapGet("/todoitems2", async (TodoDb db) =>
    await db.Todos.ToListAsync())
    .WithName("GetToDoItems");

Címkék hozzáadása az OpenAPI-leíráshoz

A következő kód egy OpenAPI-csoportosítási címkét használ:

app.MapGet("/todoitems", async (TodoDb db) =>
    await db.Todos.ToListAsync())
    .WithTags("TodoGroup");

A Microsoft.AspNetCore.OpenApi csomag beépített támogatást nyújt az OpenAPI-dokumentumkészítéshez a ASP.NET Core-ban. A csomag a következő funkciókat biztosítja:

  • OpenAPI-dokumentumok futásidőben történő létrehozásának és az alkalmazás végpontján keresztüli elérésének támogatása.
  • Az "átalakító" API-k támogatása, amelyek lehetővé teszik a létrehozott dokumentum módosítását.
  • Több OpenAPI-dokumentum egyetlen alkalmazásból történő létrehozásának támogatása.
  • Kihasználja a System.Text.Jsonáltal biztosított JSON-sématámogatást.
  • Kompatibilis a natív AoT-vel.

Csomag telepítése

Telepítse a Microsoft.AspNetCore.OpenApi csomagot:

A következő parancsot a Package Manager Konzol-ból futtassa:

Install-Package Microsoft.AspNetCore.OpenApi

OpenAPI-dokumentumlétrehozás konfigurálása

A következő kód:

  • OpenAPI-szolgáltatásokat ad hozzá az alkalmazásszerkesztő szolgáltatásgyűjteményének AddOpenApi bővítménymetódusával.
  • Leképzi az OpenAPI-dokumentum JSON formátumban való megtekintésére szolgáló végpontot az alkalmazás MapOpenApi bővítménymetódusával.
var builder = WebApplication.CreateBuilder();

builder.Services.AddOpenApi();

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.MapOpenApi();
}

app.MapGet("/", () => "Hello world!");

app.Run();

Indítsa el az alkalmazást, és lépjen a https://localhost:<port>/openapi/v1.json pontra a létrehozott OpenAPI-dokumentum megtekintéséhez.

Az OpenAPI-dokumentumok létrehozásának testreszabása

Az alábbi szakaszok bemutatják, hogyan szabhatja testre az OpenAPI-dokumentumok létrehozását.

Az OpenAPI-dokumentum nevének testreszabása

Az alkalmazás minden OpenAPI-dokumentumának egyedi neve van. A regisztrált alapértelmezett dokumentumnév v1.

builder.Services.AddOpenApi(); // Document name is v1

A dokumentum neve úgy módosítható, hogy paraméterként adja át a nevet a AddOpenApi hívásnak.

builder.Services.AddOpenApi("internal"); // Document name is internal

A dokumentum neve több helyen is megjelenik az OpenAPI-implementációban.

A létrehozott OpenAPI-dokumentum lekérésekor a rendszer a dokumentum nevét adja meg a kérelem documentName paraméterargumentumaként. Az alábbi kérések feloldják a v1 és internal dokumentumokat.

GET http://localhost:5000/openapi/v1.json
GET http://localhost:5000/openapi/internal.json

Létrehozott dokumentum OpenAPI-verziójának testreszabása

Alapértelmezés szerint az OpenAPI-dokumentumlétrehozás olyan dokumentumot hoz létre, amely megfelel az OpenAPI-specifikáció3.0-s verziójának. Az alábbi kód bemutatja, hogyan módosíthatja az OpenAPI-dokumentum alapértelmezett verzióját:

builder.Services.AddOpenApi(options =>
{
    options.OpenApiVersion = OpenApiSpecVersion.OpenApi2_0;
});

Az OpenAPI-végpont útvonalának testreszabása

Alapértelmezés szerint a MapOpenApi hívással regisztrált OpenAPI-végpont a /openapi/{documentName}.json végponton teszi elérhetővé a dokumentumot. Az alábbi kód bemutatja, hogyan szabhatja testre azt az útvonalat, amelyen az OpenAPI-dokumentum regisztrálva van:

app.MapOpenApi("/openapi/{documentName}/openapi.json");

Lehetséges, de nem ajánlott eltávolítani a documentName útvonalparamétert a végpontútvonalról. Amikor a documentName útvonalparaméter el lesz távolítva a végpontútvonalról, a keretrendszer megpróbálja feloldani a dokumentum nevét a lekérdezési paraméterből. Ha nem adja meg a documentName sem az útvonalban, sem a lekérdezésben, az váratlan viselkedést eredményezhet.

Az OpenAPI-végpont testreszabása

Mivel az OpenAPI-dokumentumot egy útvonalkezelő végponton keresztül kézbesítik, a standard minimális végpontok számára elérhető testreszabások az OpenAPI-végpont számára érhetők el.

OpenAPI-dokumentumhozzáférés korlátozása jogosult felhasználók számára

Az OpenAPI-végpont alapértelmezés szerint nem engedélyezi az engedélyezési ellenőrzéseket. Az engedélyezési ellenőrzések azonban alkalmazhatók az OpenAPI-dokumentumra. Az alábbi kódban az OpenAPI-dokumentumhoz való hozzáférés az tester szerepkörrel rendelkezőkre korlátozódik:

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();

Gyorsítótárazott OpenAPI-dokumentum

Az OpenAPI-dokumentum minden alkalommal újra létrejön, amikor a rendszer kérést küld az OpenAPI-végpontnak. A regeneráció lehetővé teszi, hogy a transzformátorok dinamikus alkalmazásállapotokat építsenek be a működésükbe. Például egy kérés újragenerálása a HTTP-környezet részleteivel. Adott esetben az OpenAPI-dokumentum gyorsítótárazható, hogy ne hajtsa végre a dokumentumlétrehozási folyamatot minden HTTP-kérésen.

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();

if (app.Environment.IsDevelopment())
{
    app.MapOpenApi()
        .CacheOutput();
}

app.MapGet("/", () => "Hello world!");

app.Run();

Több OpenAPI-dokumentum létrehozása

Bizonyos esetekben hasznos lehet több OpenAPI-dokumentum létrehozása egyetlen ASP.NET Core API-alkalmazástól eltérő tartalommal. Ezek a forgatókönyvek a következők:

  • OpenAPI-dokumentáció létrehozása különböző célközönségekhez, például nyilvános és belső API-khoz.
  • OpenAPI-dokumentáció létrehozása az API különböző verzióihoz.
  • OpenAPI-dokumentáció létrehozása az alkalmazás különböző részeihez, például egy előtér- és háttér API-hoz.

Több OpenAPI-dokumentum létrehozásához minden dokumentumhoz egyszer hívja meg a AddOpenApi bővítménymetódust, és minden alkalommal adjon meg egy másik dokumentumnevet az első paraméterben.

builder.Services.AddOpenApi("v1");
builder.Services.AddOpenApi("v2");

A AddOpenApi minden egyes meghívása megadhatja a saját beállításkészletét, így mindegyik OpenAPI-dokumentumhoz ugyanazt vagy különböző testreszabást használhatja.

A keretrendszer a ShouldIncludeOpenApiOptions delegálási módszerét használja annak meghatározására, hogy mely végpontokat vegye fel az egyes dokumentumokba.

Minden dokumentum esetében a ShouldInclude delegálási metódust hívja meg az alkalmazás minden végpontja, és átadja a végpont ApiDescription objektumát. A metódus logikai értéket ad vissza, amely jelzi, hogy a végpont szerepeljen-e a dokumentumban. Az ApiDescription objektum:

  • információkat tartalmaz a végpontról, például a HTTP-metódusról, az útvonalról és a választípusokról
  • A végponthoz attribútumokkal vagy kiterjesztési metódusokkal csatolt metaadatok.

A delegátus alapértelmezett implementációja a GroupNameApiDescription mezőjét használja. A delegált egy végponton van beállítva a WithGroupName bővítménymetódus vagy a EndpointGroupNameAttribute attribútum használatával. WithGroupName vagy a EndpointGroupName attribútum határozza meg, hogy mely végpontok szerepeljenek a dokumentumban. Azok a végpontok, amelyekhez nincs hozzárendelve csoportnév, szerepelnek az összes OpenAPI-dokumentumban.

    // Include endpoints without a group name or with a group name that matches the document name
    ShouldInclude = (description) => description.GroupName == null || description.GroupName == DocumentName;    

A ShouldInclude delegálási metódust testre szabhatja úgy, hogy a választott feltételek alapján belefoglalja vagy kizárja a végpontokat.

OpenAPI-dokumentumok létrehozása összeállításkor

A tipikus webalkalmazásokban az OpenAPI-dokumentumok futásidőben jönnek létre, és egy HTTP-kérésen keresztül kézbesítik az alkalmazáskiszolgálónak.

Bizonyos esetekben hasznos az OpenAPI-dokumentum létrehozása az alkalmazás buildelési lépése során. Ezek a forgatókönyvek a következők:

  • A verziókövetésbe rögzített OpenAPI-dokumentáció létrehozása.
  • A specifikációalapú integrációs teszteléshez használt OpenAPI-dokumentáció létrehozása.
  • A webkiszolgálóról statikusan kiszolgált OpenAPI-dokumentáció létrehozása.

Ha támogatást szeretne adni az OpenAPI-dokumentumok létrehozáskor történő létrehozásához, telepítse a Microsoft.Extensions.ApiDescription.Server csomagot:

A következő parancsot a Package Manager Konzol-ból futtassa:

Install-Package Microsoft.Extensions.ApiDescription.Server

Telepítéskor ez a csomag:

  • Automatikusan létrehozza az alkalmazáshoz társított Open API-dokumentumokat a buildelés során.
  • Kitölti az Open API-dokumentumokat az alkalmazás kimeneti könyvtárában.

Ha több dokumentum van regisztrálva, a és a dokumentum neve a , nem pedig av1, akkor a dokumentum neve hozzá van fűzve. Például. {ProjectName}_{DocumentName}.json

dotnet build
type obj\{ProjectName}.json

A buildelési idő dokumentumgenerálásának testreszabása

A létrehozott Open API-fájl kimeneti könyvtárának módosítása

Alapértelmezés szerint a létrehozott OpenAPI-dokumentum ki lesz bocsátva az alkalmazás kimeneti könyvtárába. A kibocsátott fájl helyének módosításához állítsa be a cél elérési útját a OpenApiDocumentsDirectory tulajdonságban.

<PropertyGroup>
  <OpenApiDocumentsDirectory>.</OpenApiDocumentsDirectory>
</PropertyGroup>

A OpenApiDocumentsDirectory értéke a projektfájlhoz képest határozható meg. A fenti . érték használatával az OpenAPI-dokumentumot a projektfájllal megegyező könyvtárban bocsátja ki.

A kimeneti fájl nevének módosítása

Alapértelmezés szerint a létrehozott OpenAPI-dokumentum neve megegyezik az alkalmazás projektfájljával. A kibocsátott fájl nevének módosításához állítsa be a --file-name argumentumot a OpenApiGenerateDocumentsOptions tulajdonságban.

<PropertyGroup>
  <OpenApiGenerateDocumentsOptions>--file-name my-open-api</OpenApiGenerateDocumentsOptions>
</PropertyGroup>

A létrehozandó OpenAPI-dokumentum kiválasztása

Egyes alkalmazások több OpenAPI-dokumentum kibocsátására is konfigurálhatók. Több OpenAPI-dokumentum is létrehozható egy API különböző verzióihoz, illetve a nyilvános és a belső API-k megkülönböztetéséhez. Alapértelmezés szerint a buildelési idő dokumentumgenerátora az alkalmazásban konfigurált összes dokumentum fájljait bocsátja ki. Ha csak egyetlen dokumentumnevet szeretne kibocsátani, állítsa be a --document-name argumentumot a OpenApiGenerateDocumentsOptions tulajdonságban.

<PropertyGroup>
  <OpenApiGenerateDocumentsOptions>--document-name v2</OpenApiGenerateDocumentsOptions>
</PropertyGroup>

A futásidejű viselkedés testreszabása a dokumentum generálása során a build idő alatt

A buildelési idejű OpenAPI-dokumentumlétrehozási funkciók az alkalmazások belépési pontjának egy makettkiszolgáló-implementációval történő elindításával működnek. A modellkiszolgálóknak pontos OpenAPI-dokumentumokat kell létrehozniuk, mert az OpenAPI-dokumentum összes információja nem elemezhető statikusan. Mivel a rendszer meghívja az alkalmazások belépési pontját, a rendszer meghívja az alkalmazások indítási logikáját. Ez magában foglalja azt a kódot, amely szolgáltatásokat injektál a DI tárolóba vagy olvas be konfigurációból. Bizonyos esetekben korlátozni kell azokat a kódelérési útvonalakat, amelyek akkor fognak futni, amikor az alkalmazások belépési pontját meghívják a buildelési idejű dokumentumgenerálásból. Ezek a forgatókönyvek a következők:

  • Nem olvassa a bizonyos konfigurációs karakterláncokat.
  • Nem regisztrál adatbázissal kapcsolatos szolgáltatásokat.

Annak érdekében, hogy megakadályozzuk ezen kódútvonalak meghívását a buildelési idő alatti generálási folyamat során, feltételekhez köthetjük azokat a belépési összetevő ellenőrzésével.

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();

Az AddServiceDefaults olyan gyakori Aspire szolgáltatásokat ad hozzá, mint a szolgáltatásfelderítés, a rugalmasság, az állapotellenőrzések és az OpenTelemetria.

Vágás és natív AOT futtatás

Az OpenAPI a ASP.NET Core-ban támogatja a vágást és a natív AOT-t. A következő lépések egy OpenAPI-alkalmazás létrehozását és közzétételét részletezik vágás és natív AOT használatával:

Hozzon létre egy új ASP.NET Core Web API-projektet (natív AOT-projektet).

dotnet new webapiaot

Adja hozzá a Microsoft.AspNetCore.OpenAPI csomagot.

dotnet add package Microsoft.AspNetCore.OpenApi

Frissítse a(z) Program.cs-t az OpenAPI-dokumentumok generálásának engedélyezéséhez.

+ builder.Services.AddOpenApi();

var app = builder.Build();

+ app.MapOpenApi();

Tegye közzé az alkalmazást.

dotnet publish