Začínáme s swashbuckle a ASP.NET Core

Zobrazit nebo stáhnout ukázkový kód (Jak stáhnout)

Swashbuckle má tři hlavní komponenty:

  • Swashbuckle. AspNetCore. Swagger: objektový model a middleware pro objekty Swagger k vystavení SwaggerDocument objektů jako koncových bodů JSON.

  • Swashbuckle. AspNetCore. SwaggerGen: generátor Swagger, který vytváří SwaggerDocument objekty přímo z vašich tras, řadičů a modelů. Obvykle funguje tak, že v kombinaci s middlewarem koncových bodů Swaggeru automaticky zveřejňuje kód JSON pro Swagger.

  • Swashbuckle. AspNetCore. SwaggerUI: vložená verze nástroje uživatelského rozhraní Swagger. Interpretuje JSON pro Swagger v podobě propracovaného, přizpůsobitelného prostředí pro popis funkcí webového rozhraní API. Jeho součástí je i integrovaný správce testů pro veřejné metody.

Instalace balíčku

Swashbuckle je možné přidat s následujícími přístupy:

  • z okna konzoly Správce balíčků :

    • přejít k zobrazení > jiných Windows > Správce balíčků konzole

    • Přejděte do adresáře, ve kterém existuje soubor . csproj.

    • Spusťte následující příkaz:

      Install-Package Swashbuckle.AspNetCore -Version 6.2.3
      
  • v dialogovém okně spravovat NuGet balíčky :

    • klikněte pravým tlačítkem na projekt v Průzkumník řešení > spravovat balíčky NuGet
    • Nastavte zdroj balíčku na "NuGet.org".
    • Ujistěte se, že je povolená možnost zahrnout předběžné verze.
    • Do vyhledávacího pole zadejte "swashbuckle. AspNetCore".
    • Na kartě Procházet vyberte nejnovější balíček "swashbuckle. AspNetCore" a klikněte na instalovat .

Přidat a nakonfigurovat middleware Swagger

Přidejte generátor Swagger do kolekce Services v programu program. cs:

builder.Services.AddControllers();

builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

Povolte middleware pro obsluhu generovaného dokumentu JSON a uživatelského rozhraní Swagger, a to i v programu program. cs:

if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

Předchozí kód přidá middleware Swagger pouze v případě, že je aktuální prostředí nastaveno na vývoj. UseSwaggerUIVolání metody umožňuje middleware statického souboru.

Spusťte aplikaci a přejděte na adresu https://localhost:<port>/swagger/v1/swagger.json . Vygenerovaný dokument popisující koncové body se zobrazí, jak je uvedeno v openapi Specification (openapi. JSON).

Uživatelské rozhraní Swagger najdete na adrese https://localhost:<port>/swagger . Prozkoumejte rozhraní API prostřednictvím uživatelského rozhraní Swagger a zahrňte je do jiných programů.

Tip

Pro obsluhu uživatelského rozhraní Swagger v kořenovém adresáři aplikace ( https://localhost:<port>/ ) nastavte RoutePrefix vlastnost na prázdný řetězec:

app.UseSwaggerUI(options =>
{
    options.SwaggerEndpoint("/swagger/v1/swagger.json", "v1");
    options.RoutePrefix = string.Empty;
});

Pokud používáte adresáře se službou IIS nebo reverzním proxy serverem, nastavte koncový bod Swagger na relativní cestu pomocí ./ předpony. Například, ./swagger/v1/swagger.json. Pomocí nástroje /swagger/v1/swagger.json instruuje aplikaci, aby hledala soubor JSON na skutečném kořenu adresy URL (plus předpona trasy, pokud se používá). Můžete například namísto https://localhost:<port>/<route_prefix>/swagger/v1/swagger.json použít https://localhost:<port>/<virtual_directory>/<route_prefix>/swagger/v1/swagger.json.

Poznámka

Ve výchozím nastavení swashbuckle vygeneruje a zpřístupňuje JSON pro Swagger ve verzi 3,0 specifikace — oficiálně označované jako specifikace openapi. Pro podporu zpětné kompatibility můžete místo toho použít k odhalení JSON ve formátu 2,0. tento formát 2,0 je důležitý pro integraci, jako je Microsoft Power Apps a Microsoft Flow, která aktuálně podporuje OpenAPI verze 2,0. Pokud se chcete přihlásit ke formátu 2,0, nastavte SerializeAsV2 vlastnost v programu program. cs:

app.UseSwagger(options =>
{
    options.SerializeAsV2 = true;
});

Přizpůsobení a rozšiřování

Swagger poskytuje možnosti pro dokumentaci k objektovému modelu a přizpůsobení uživatelského rozhraní tak, aby odpovídalo vašemu motivu.

Informace a popis rozhraní API

Akce konfigurace předaná AddSwaggerGen metodě přidá informace, jako je autor, licence a popis.

V programu program. cs importujte následující obor názvů pro použití OpenApiInfo třídy:

using Microsoft.OpenApi.Models;

Pomocí OpenApiInfo třídy upravte informace zobrazené v uživatelském rozhraní:

builder.Services.AddSwaggerGen(options =>
{
    options.SwaggerDoc("v1", new OpenApiInfo
    {
        Version = "v1",
        Title = "ToDo API",
        Description = "An ASP.NET Core Web API for managing ToDo items",
        TermsOfService = new Uri("https://example.com/terms"),
        Contact = new OpenApiContact
        {
            Name = "Example Contact",
            Url = new Uri("https://example.com/contact")
        },
        License = new OpenApiLicense
        {
            Name = "Example License",
            Url = new Uri("https://example.com/license")
        }
    });
});

Uživatelské rozhraní Swagger zobrazuje informace o verzi:

Uživatelské rozhraní Swagger s informacemi o verzi: Popis, autor a licence

Komentáře XML

Komentáře XML lze povolit pomocí následujících přístupů:

  • Klikněte pravým tlačítkem na projekt v Průzkumník řešení a vyberte upravit <PROJECT_NAME>. csproj.
  • Ručně přidejte zvýrazněné řádky do souboru . csproj :

Povolení komentářů XML poskytuje ladicí informace pro nedokumentované veřejné typy a členy. Nedokumentované typy a členy jsou označeny varovnou zprávou. Například následující zpráva indikuje porušení kódu upozornění 1591:

warning CS1591: Missing XML comment for publicly visible type or member 'TodoController'

Chcete-li potlačit upozornění v rámci projektu, definujte seznam kódů upozornění oddělených středníkem, které mají být v souboru projektu ignorovány. Připojení kódů upozornění k $(NoWarn); použití výchozích hodnot jazyka C# .

Chcete-li potlačit upozornění pouze pro konkrétní členy, uveďte kód v direktivách preprocesoru upozornění #pragma . Tento přístup je užitečný pro kód, který by neměl být zveřejněn prostřednictvím dokumentace rozhraní API. V následujícím příkladu je kód upozornění CS1591 ignorován pro celou TodoContext třídu. Vynucování kódu upozornění je obnoveno při zavření definice třídy. Zadejte více kódů upozornění se seznamem odděleným čárkami.

namespace SwashbuckleSample.Models
{
#pragma warning disable CS1591
    public class TodoContext : DbContext
    {
        public TodoContext(DbContextOptions<TodoContext> options) : base(options) { }

        public DbSet<TodoItem> TodoItems => Set<TodoItem>();
    }
#pragma warning restore CS1591
}

Nakonfigurujte Swagger pro použití souboru XML, který je vygenerovaný předchozími pokyny. u operačních systémů Linux nebo non Windows se může u názvů souborů a cest rozlišovat velká a malá písmena. například TodoApi.XML soubor je platný v Windows, ale ne CentOS.

builder.Services.AddSwaggerGen(options =>
{
    options.SwaggerDoc("v1", new OpenApiInfo
    {
        Version = "v1",
        Title = "ToDo API",
        Description = "An ASP.NET Core Web API for managing ToDo items",
        TermsOfService = new Uri("https://example.com/terms"),
        Contact = new OpenApiContact
        {
            Name = "Example Contact",
            Url = new Uri("https://example.com/contact")
        },
        License = new OpenApiLicense
        {
            Name = "Example License",
            Url = new Uri("https://example.com/license")
        }
    });

    // using System.Reflection;
    var xmlFilename = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
    options.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, xmlFilename));
});

V předchozím kódu se reflexe používá k sestavení názvu souboru XML, který odpovídá tomuto projektu webového rozhraní API. Vlastnost AppContext. BaseDirectory se používá k vytvoření cesty k souboru XML. Některé funkce Swagger (například schémat vstupních parametrů nebo metody HTTP a kódy odpovědí z příslušných atributů) fungují bez použití souboru dokumentace XML. Pro většinu funkcí, konkrétně souhrny metod a popisy parametrů a kódů odpovědí, je použití souboru XML povinné.

Můžete k akci přidat také komentáře uvozené třemi lomítky, a vylepšit tak Swagger UI tím, že přidáte popis do hlavičky oddílu. Přidejte <summary> element nad Delete akci:

/// <summary>
/// Deletes a specific TodoItem.
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpDelete("{id}")]
public async Task<IActionResult> Delete(long id)
{
    var item = await _context.TodoItems.FindAsync(id);

    if (item is null)
    {
        return NotFound();
    }

    _context.TodoItems.Remove(item);
    await _context.SaveChangesAsync();

    return NoContent();
}

Uživatelské rozhraní Swagger zobrazí vnitřní text elementu předchozí kód <summary> :

Uživatelské rozhraní Swagger, které zobrazuje komentář XML, odstraní konkrétní TodoItem. pro metodu DELETE

Uživatelské rozhraní je založené na generovaném schématu JSON:

"delete": {
    "tags": [
        "Todo"
    ],
    "summary": "Deletes a specific TodoItem.",
    "parameters": [
        {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
                "type": "integer",
                "format": "int64"
            }
        }
    ],
    "responses": {
        "200": {
            "description": "Success"
        }
    }
},

Přidejte <remarks> element do dokumentace k Create metodě akce. Doplňuje informace zadané v <summary> prvku a poskytuje robustnější uživatelské rozhraní Swagger. <remarks>Obsah elementu se může skládat z textu, JSON nebo XML.

/// <summary>
/// Creates a TodoItem.
/// </summary>
/// <param name="item"></param>
/// <returns>A newly created TodoItem</returns>
/// <remarks>
/// Sample request:
///
///     POST /Todo
///     {
///        "id": 1,
///        "name": "Item #1",
///        "isComplete": true
///     }
///
/// </remarks>
/// <response code="201">Returns the newly created item</response>
/// <response code="400">If the item is null</response>
[HttpPost]
[ProducesResponseType(StatusCodes.Status201Created)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
public async Task<IActionResult> Create(TodoItem item)
{
    _context.TodoItems.Add(item);
    await _context.SaveChangesAsync();

    return CreatedAtAction(nameof(Get), new { id = item.Id }, item);
}

Všimněte si vylepšení uživatelského rozhraní pomocí těchto dalších komentářů:

Uživatelské rozhraní Swagger s dalšími zobrazenými komentáři

Datové poznámky

Označte model atributy, které najdete v oboru názvů System.ComponentModel.DataAnnotations, abyste pomohli řídit komponenty uživatelského rozhraní Swagger.

Přidejte [Required] atribut Name do vlastnosti třídy TodoItem :

using System.ComponentModel;
using System.ComponentModel.DataAnnotations;

namespace SwashbuckleSample.Models
{
    public class TodoItem
    {
        public long Id { get; set; }

        [Required]
        public string Name { get; set; } = null!;

        [DefaultValue(false)]
        public bool IsComplete { get; set; }
    }
}

Přítomnost tohoto atributu změní chování uživatelského rozhraní a změní základní schéma JSON:

"schemas": {
    "TodoItem": {
        "required": [
            "name"
        ],
        "type": "object",
        "properties": {
            "id": {
                "type": "integer",
                "format": "int64"
            },
            "name": {
                "type": "string"
            },
            "isComplete": {
                "type": "boolean",
                "default": false
            }
        },
        "additionalProperties": false
    }
},

Přidejte [Produces("application/json")] atribut do kontroleru rozhraní API. Jejím účelem je deklarovat, že akce kontroleru podporují typ obsahu odpovědi application/json:

[ApiController]
[Route("api/[controller]")]
[Produces("application/json")]
public class TodoController : ControllerBase
{

Rozevírací seznam Typ média vybere tento typ obsahu jako výchozí pro akce GET kontroleru:

Uživatelské rozhraní Swagger s výchozím typem obsahu odpovědi

S tím, jak se zvyšuje využití datových poznámek ve webovém rozhraní API, jsou stránky nápovědy uživatelského rozhraní a rozhraní API popisnější a užitečnější.

Popis typů odpovědí

Vývojáři, kteří spotřebovávají webové rozhraní API, se nejvíce obává vrácených konkrétních typů odpovědí a kódů chyb — (pokud ne standardní). Typy odpovědí a kódy chyb jsou v komentářích XML a datových poznámkách označeny.

Akce při úspěchu vrátí stavový kód Create HTTP 201. Stavový kód HTTP 400 se vrátí, když má tělo požadavku posted hodnotu null. Bez správné dokumentace v uživatelském rozhraní Swaggeru spotřebitel nemá o těchto očekávaných výsledcích znalosti. Opravte tento problém přidáním zvýrazněných řádků v následujícím příkladu:

/// <summary>
/// Creates a TodoItem.
/// </summary>
/// <param name="item"></param>
/// <returns>A newly created TodoItem</returns>
/// <remarks>
/// Sample request:
///
///     POST /Todo
///     {
///        "id": 1,
///        "name": "Item #1",
///        "isComplete": true
///     }
///
/// </remarks>
/// <response code="201">Returns the newly created item</response>
/// <response code="400">If the item is null</response>
[HttpPost]
[ProducesResponseType(StatusCodes.Status201Created)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
public async Task<IActionResult> Create(TodoItem item)
{
    _context.TodoItems.Add(item);
    await _context.SaveChangesAsync();

    return CreatedAtAction(nameof(Get), new { id = item.Id }, item);
}

Swagger UI teď jasně dokumentovat očekávané kódy odpovědí HTTP:

Swagger UI zobrazující popis třídy odpovědi POST : Vrátí nově vytvořenou položku todo a chybu 400 – Pokud má položka hodnotu null pro stavový kód a důvod v části Zprávy odpovědi.

Konvence lze použít jako alternativu k explicitnímu vytyčování jednotlivých akcí pomocí [ProducesResponseType] . Další informace naleznete v tématu Použití konvencí webového rozhraní API.

Pro podporu [ProducesResponseType] dekorování balíček Swashbuckle.AspNetCore.Annotations nabízí rozšíření pro povolení a rozšíření odpovědí, schématu a metadat parametrů.

Přizpůsobení uživatelského rozhraní

Výchozí uživatelské rozhraní je funkční i prezentovatelné. Stránky dokumentace k rozhraní API by ale měly představovat vaši značku nebo motiv. Branding komponent Swashbuckle vyžaduje přidání prostředků pro obsluhu statických souborů a sestavení struktury složek pro hostování těchto souborů.

Povolení middlewaru statického souboru:

app.UseHttpsRedirection();
app.UseStaticFiles();
app.MapControllers();

Pokud chcete vložit další šablony stylů CSS, přidejte je do složky wwwroot projektu a v možnostech middlewaru zadejte relativní cestu:

app.UseSwaggerUI(options =>
{
    options.InjectStylesheet("/swagger-ui/custom.css");
});

Další zdroje informací

Swashbuckle má tři hlavní komponenty:

  • Swashbuckle.AspNetCore.Swagger:Objektový model Swaggeru a middleware pro vystavení objektů SwaggerDocument jako koncových bodů JSON.

  • Swashbuckle.AspNetCore.SwaggerGen:Generátor Swagger, který vytváří objekty přímo z SwaggerDocument tras, kontrolerů a modelů. Obvykle funguje tak, že v kombinaci s middlewarem koncových bodů Swaggeru automaticky zveřejňuje kód JSON pro Swagger.

  • Swashbuckle.AspNetCore.SwaggerUI:vložená verze nástroje Swagger UI. Interpretuje JSON pro Swagger v podobě propracovaného, přizpůsobitelného prostředí pro popis funkcí webového rozhraní API. Jeho součástí je i integrovaný správce testů pro veřejné metody.

Instalace balíčku

Swashbuckle je možné přidat s následujícími přístupy:

  • V okně Správce balíčků konzoly:

    • Přejděte na Zobrazit > další Windows Správce balíčků > Console.

    • Přejděte do adresáře, ve kterém existuje soubor TodoApi.csproj.

    • Spusťte následující příkaz:

      Install-Package Swashbuckle.AspNetCore -Version 5.6.3
      
  • V dialogovém okně NuGet balíčků:

    • Klikněte pravým tlačítkem na projekt v Průzkumník řešení > Spravovat NuGet balíčky.
    • Nastavte Zdroj balíčku na "nuget.org".
    • Ujistěte se, že je povolená možnost Zahrnout předběžné verze.
    • Do vyhledávacího pole zadejte Swashbuckle.AspNetCore.
    • Na kartě Procházet vyberte nejnovější balíček Swashbuckle.AspNetCore a klikněte na Nainstalovat.

Přidání a konfigurace middlewaru Swagger

Přidejte generátor Swagger do kolekce služeb v Startup.ConfigureServices metodě :

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<TodoContext>(opt =>
        opt.UseInMemoryDatabase("TodoList"));
    services.AddControllers();

    // Register the Swagger generator, defining 1 or more Swagger documents
    services.AddSwaggerGen();
}

V Startup.Configure metodě povolte middleware pro obsluhu generovaného dokumentu JSON a uživatelského rozhraní Swaggeru:

public void Configure(IApplicationBuilder app)
{
    // Enable middleware to serve generated Swagger as a JSON endpoint.
    app.UseSwagger();

    // Enable middleware to serve swagger-ui (HTML, JS, CSS, etc.)
    app.UseSwaggerUI();

    app.UseRouting();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}

Poznámka

Swashbuckle spoléhá při zjišťování tras a koncových bodů na Microsoft.AspNetCore.Mvc.ApiExplorer MVC. Pokud projekt volá AddMvc , trasy a koncové body se automaticky objeví. Při volání AddMvcCore metody musí být explicitně AddApiExplorer volána metoda . Další informace najdete v tématu Swashbuckle, ApiExplorera Směrování .

Předchozí volání UseSwaggerUI metody povoluje middleware statického souboru. Pokud cílíte .NET Framework nebo .NET Core 1.x, přidejte do projektu NuGet Microsoft.AspNetCore.StaticFiles.

Spusťte aplikaci a přejděte na http://localhost:<port>/swagger/v1/swagger.json . Vygenerovaný dokument popisující koncové body se zobrazí tak, jak je znázorněno ve specifikaci OpenAPI (openapi.json).

Uživatelské rozhraní Swaggeru najdete na adrese http://localhost:<port>/swagger . Prozkoumejte rozhraní API přes Swagger UI a začleňujete ho do jiných programů.

Tip

Pro obsluhu Swagger UI v kořenovém adresáři aplikace ( http://localhost:<port>/ ) nastavte RoutePrefix vlastnost na prázdný řetězec:

app.UseSwaggerUI(c =>
{
    c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
    c.RoutePrefix = string.Empty;
});

Pokud používáte adresáře se službou IIS nebo reverzním proxy serverem, nastavte koncový bod Swaggeru na relativní cestu pomocí ./ předpony. Například, ./swagger/v1/swagger.json. Použití instruuje aplikaci, aby v kořenovém adresáři adresy URL ve skutečném kořenovém adresáři (plus předponu trasy, pokud /swagger/v1/swagger.json se používá) našli soubor JSON. Můžete například namísto http://localhost:<port>/<route_prefix>/swagger/v1/swagger.json použít http://localhost:<port>/<virtual_directory>/<route_prefix>/swagger/v1/swagger.json.

Poznámka

Ve výchozím nastavení Swashbuckle vygeneruje a zpřístupní JSON pro Swagger ve verzi 3.0 specifikace, která se oficiálně nazývá — Specifikace OpenAPI. Pokud chcete podporovat zpětnou kompatibilitu, můžete místo toho vyjádřit výslovný souhlas s vystavením FORMÁTU JSON ve formátu 2.0. Tento formát 2.0 je důležitý pro integrace, jako je Microsoft Power Apps a Microsoft Flow, které aktuálně podporují OpenAPI verze 2.0. Pokud se chcete přihlásit k formátu 2.0, nastavte SerializeAsV2 vlastnost v Startup.Configure :

public void Configure(IApplicationBuilder app)
{
    // Enable middleware to serve generated Swagger as a JSON endpoint.
    app.UseSwagger(c =>
    {
        c.SerializeAsV2 = true;
    });

    // Enable middleware to serve swagger-ui (HTML, JS, CSS, etc.),
    // specifying the Swagger JSON endpoint.
    app.UseSwaggerUI(c =>
    {
        c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
    });

    app.UseRouting();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}

Přizpůsobení a rozšíření

Swagger nabízí možnosti pro dokumentování objektového modelu a přizpůsobení uživatelského rozhraní tak, aby odpovídalo vašemu motivu.

Do Startup třídy přidejte následující obory názvů:

using System;
using System.Reflection;
using System.IO;

Informace a popis rozhraní API

Konfigurační akce předaná AddSwaggerGen metodě přidá informace, jako je autor, licence a popis:

Ve třídě Startup naimportujte následující obor názvů pro použití OpenApiInfo třídy :

using Microsoft.OpenApi.Models;

Pomocí třídy OpenApiInfo upravte informace zobrazené v uživatelském rozhraní:

// Register the Swagger generator, defining 1 or more Swagger documents
services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new OpenApiInfo
    {
        Version = "v1",
        Title = "ToDo API",
        Description = "A simple example ASP.NET Core Web API",
        TermsOfService = new Uri("https://example.com/terms"),
        Contact = new OpenApiContact
        {
            Name = "Shayne Boyer",
            Email = string.Empty,
            Url = new Uri("https://twitter.com/spboyer"),
        },
        License = new OpenApiLicense
        {
            Name = "Use under LICX",
            Url = new Uri("https://example.com/license"),
        }
    });
});

Swagger UI zobrazí informace o verzi:

Swagger UI s informacemi o verzi: description, author a see more link

Komentáře XML

Komentáře XML lze povolit s následujícími přístupy:

  • Klikněte pravým tlačítkem na projekt v Průzkumník řešení a vyberte Upravit <project_name>.csproj.
  • Ručně přidejte zvýrazněné řádky do souboru .csproj:

Povolení komentářů XML poskytuje ladicí informace pro nedokumentované veřejné typy a členy. Nedokumentované typy a členy jsou označeny varovnou zprávou. Například následující zpráva indikuje porušení kódu upozornění 1591:

warning CS1591: Missing XML comment for publicly visible type or member 'TodoController.GetAll()'

Chcete-li potlačit upozornění v rámci projektu, definujte seznam kódů upozornění oddělených středníkem, které mají být v souboru projektu ignorovány. Připojení kódů upozornění k $(NoWarn); použití výchozích hodnot jazyka C# .

Chcete-li potlačit upozornění pouze pro konkrétní členy, uveďte kód v direktivách preprocesoru upozornění #pragma . Tento přístup je užitečný pro kód, který by neměl být zveřejněn prostřednictvím dokumentace rozhraní API. V následujícím příkladu je kód upozornění CS1591 ignorován pro celou Program třídu. Vynucování kódu upozornění je obnoveno při zavření definice třídy. Zadejte více kódů upozornění se seznamem odděleným čárkami.

namespace TodoApi
{
#pragma warning disable CS1591
    public class Program
    {
        public static void Main(string[] args) =>
            BuildWebHost(args).Run();

        public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .Build();
    }
#pragma warning restore CS1591
}

Nakonfigurujte Swagger pro použití souboru XML, který je vygenerovaný předchozími pokyny. u operačních systémů Linux nebo non Windows se může u názvů souborů a cest rozlišovat velká a malá písmena. například TodoApi.XML soubor je platný v Windows, ale ne CentOS.

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<TodoContext>(opt =>
        opt.UseInMemoryDatabase("TodoList"));
    services.AddControllers();

    // Register the Swagger generator, defining 1 or more Swagger documents
    services.AddSwaggerGen(c =>
    {
        c.SwaggerDoc("v1", new OpenApiInfo
        {
            Version = "v1",
            Title = "ToDo API",
            Description = "A simple example ASP.NET Core Web API",
            TermsOfService = new Uri("https://example.com/terms"),
            Contact = new OpenApiContact
            {
                Name = "Shayne Boyer",
                Email = string.Empty,
                Url = new Uri("https://twitter.com/spboyer"),
            },
            License = new OpenApiLicense
            {
                Name = "Use under LICX",
                Url = new Uri("https://example.com/license"),
            }
        });

        // Set the comments path for the Swagger JSON and UI.
        var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
        var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
        c.IncludeXmlComments(xmlPath);
    });
}

V předchozím kódu se reflexe používá k sestavení názvu souboru XML, který odpovídá tomuto projektu webového rozhraní API. Vlastnost AppContext. BaseDirectory se používá k vytvoření cesty k souboru XML. Některé funkce Swagger (například schémat vstupních parametrů nebo metody HTTP a kódy odpovědí z příslušných atributů) fungují bez použití souboru dokumentace XML. Pro většinu funkcí, konkrétně souhrny metod a popisy parametrů a kódů odpovědí, je použití souboru XML povinné.

Můžete k akci přidat také komentáře uvozené třemi lomítky, a vylepšit tak Swagger UI tím, že přidáte popis do hlavičky oddílu. Přidejte <summary> element nad Delete akci:

/// <summary>
/// Deletes a specific TodoItem.
/// </summary>
/// <param name="id"></param>        
[HttpDelete("{id}")]
public IActionResult Delete(long id)
{
    var todo = _context.TodoItems.Find(id);

    if (todo == null)
    {
        return NotFound();
    }

    _context.TodoItems.Remove(todo);
    _context.SaveChanges();

    return NoContent();
}

Uživatelské rozhraní Swagger zobrazí vnitřní text elementu předchozí kód <summary> :

Uživatelské rozhraní Swagger, které zobrazuje komentář XML, odstraní konkrétní TodoItem. pro metodu DELETE

Uživatelské rozhraní je založené na generovaném schématu JSON:

"delete": {
    "tags": [
        "Todo"
    ],
    "summary": "Deletes a specific TodoItem.",
    "operationId": "ApiTodoByIdDelete",
    "consumes": [],
    "produces": [],
    "parameters": [
        {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "type": "integer",
            "format": "int64"
        }
    ],
    "responses": {
        "200": {
            "description": "Success"
        }
    }
}

Přidejte <remarks> element do dokumentace k Create metodě akce. Doplňuje informace zadané v <summary> prvku a poskytuje robustnější uživatelské rozhraní Swagger. <remarks>Obsah elementu se může skládat z textu, JSON nebo XML.

/// <summary>
/// Creates a TodoItem.
/// </summary>
/// <remarks>
/// Sample request:
///
///     POST /Todo
///     {
///        "id": 1,
///        "name": "Item1",
///        "isComplete": true
///     }
///
/// </remarks>
/// <param name="item"></param>
/// <returns>A newly created TodoItem</returns>
/// <response code="201">Returns the newly created item</response>
/// <response code="400">If the item is null</response>            
[HttpPost]
[ProducesResponseType(StatusCodes.Status201Created)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
public ActionResult<TodoItem> Create(TodoItem item)
{
    _context.TodoItems.Add(item);
    _context.SaveChanges();

    return CreatedAtRoute("GetTodo", new { id = item.Id }, item);
}

Všimněte si vylepšení uživatelského rozhraní pomocí těchto dalších komentářů:

Uživatelské rozhraní Swagger s dalšími zobrazenými komentáři

Datové poznámky

Označte model s atributy, které se nacházejí v oboru názvů System. ComponentModel. DataAnnotations , aby bylo možné lépe řídit součásti uživatelského rozhraní Swagger.

Přidejte [Required] atribut do Name vlastnosti TodoItem třídy:

using System.ComponentModel;
using System.ComponentModel.DataAnnotations;

namespace TodoApi.Models
{
    public class TodoItem
    {
        public long Id { get; set; }

        [Required]
        public string Name { get; set; }

        [DefaultValue(false)]
        public bool IsComplete { get; set; }
    }
}

Přítomnost tohoto atributu mění chování uživatelského rozhraní a mění základní schéma JSON:

"definitions": {
    "TodoItem": {
        "required": [
            "name"
        ],
        "type": "object",
        "properties": {
            "id": {
                "format": "int64",
                "type": "integer"
            },
            "name": {
                "type": "string"
            },
            "isComplete": {
                "default": false,
                "type": "boolean"
            }
        }
    }
},

Přidejte [Produces("application/json")] atribut do kontroleru rozhraní API. Jeho účelem je deklarovat, že akce kontroleru podporují typ obsahu odpovědi Application/JSON:

[Produces("application/json")]
[Route("api/[controller]")]
[ApiController]
public class TodoController : ControllerBase
{
    private readonly TodoContext _context;

Rozevírací seznam typ obsahu odpovědi pro akce GET kontroleru vybere tento typ obsahu jako výchozí:

Uživatelské rozhraní Swagger s výchozím typem obsahu odpovědi

Díky nárůstu využití datových poznámek ve webovém rozhraní API se stránky s nápovědu pro uživatelské rozhraní a rozhraní API stanou výstižnější a užitečnější.

Popis typů odpovědí

Vývojáři, kteří využívají webové rozhraní API, mají největší obavy s tím, co vrací — konkrétně typy odpovědí a kódy chyb (Pokud ne Standard). Typy odpovědí a kódy chyb jsou označeny v komentářích XML a datových anotacích.

CreateAkce vrátí stavový kód HTTP 201 při úspěchu. Stavový kód HTTP 400 se vrátí, když text odeslaného požadavku má hodnotu null. Bez správné dokumentace v uživatelském rozhraní Swagger nemá spotřebitel znalosti o těchto očekávaných výsledcích. Opravte tento problém tak, že přidáte zvýrazněné řádky v následujícím příkladu:

/// <summary>
/// Creates a TodoItem.
/// </summary>
/// <remarks>
/// Sample request:
///
///     POST /Todo
///     {
///        "id": 1,
///        "name": "Item1",
///        "isComplete": true
///     }
///
/// </remarks>
/// <param name="item"></param>
/// <returns>A newly created TodoItem</returns>
/// <response code="201">Returns the newly created item</response>
/// <response code="400">If the item is null</response>            
[HttpPost]
[ProducesResponseType(StatusCodes.Status201Created)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
public ActionResult<TodoItem> Create(TodoItem item)
{
    _context.TodoItems.Add(item);
    _context.SaveChanges();

    return CreatedAtRoute("GetTodo", new { id = item.Id }, item);
}

Uživatelské rozhraní Swagger teď jasně klade očekávané kódy odpovědí HTTP:

Uživatelské rozhraní Swagger, které zobrazuje popis třídy odpovědí POST, vrátí nově vytvořenou položku TODO ' a ' 400 – Pokud má položka hodnotu null pro stavový kód a důvod v rámci zpráv odpovědí.

v ASP.NET Core 2,2 nebo novějších lze konvence použít jako alternativu k explicitnímu upraveníí jednotlivých akcí [ProducesResponseType] . Další informace naleznete v tématu Použití konvencí webového rozhraní API.

Pro podporu [ProducesResponseType] dekorace nabízí balíček swashbuckle. AspNetCore. anotace rozšíření, která umožňují a rozšiřují metadata, schéma a parametry metadat.

Přizpůsobení uživatelského rozhraní

Výchozí uživatelské rozhraní je funkční i předposíláno. Stránky dokumentace k rozhraní API by však měly představovat vaši značku nebo motiv. Branding komponent swashbuckle vyžaduje přidání prostředků k obsluze statických souborů a vytvoření struktury složek pro hostování těchto souborů.

pokud cílíte .NET Framework nebo .net Core 1. x, přidejte do projektu balíček Microsoft. AspNetCore. StaticFiles NuGet:

<PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="2.0.0" />

předchozí balíček NuGet je již nainstalován, pokud cílíte na rozhraní .net Core 2. x a použijete metapackage.

Povolit middleware statických souborů:

public void Configure(IApplicationBuilder app)
{
    app.UseStaticFiles();

    // Enable middleware to serve generated Swagger as a JSON endpoint.
    app.UseSwagger();

    // Enable middleware to serve swagger-ui (HTML, JS, CSS, etc.),
    // specifying the Swagger JSON endpoint.
    app.UseSwaggerUI(c =>
    {
        c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
    });

    app.UseRouting();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}

Chcete-li vložit další šablony stylů CSS, přidejte je do složky wwwroot projektu a zadejte relativní cestu do možností middlewaru:

app.UseSwaggerUI(c =>
{
     c.InjectStylesheet("/swagger-ui/custom.css");
}

Další zdroje informací