Začínáme se NS zamykací ASP.NET Core

OdEnenber,Riko Sutera Dave Brock

NSplach nabízí následující možnosti:

  • Možnost využívat uživatelské rozhraní Swagger a generátor Swagger.
  • Flexibilní možnosti generování kódu.

S NSggerem nepotřebujete existující rozhraní API, můžete použít rozhraní API třetích stran, která zahrnují — Swagger a generují implementaci klienta. NSwag umožňuje urychlit vývojový cyklus a snadno se přizpůsobit změnám rozhraní API.

Registrace middlewaru NSwag

Zaregistrujte middleware NSwag pro:

  • Vygenerování specifikace Swaggeru pro implementované webové rozhraní API
  • Procházejte a testujte webové rozhraní API pomocí Swagger UI.

Pokud chcete použít middleware ASP.NET Core NS windows, nainstalujte balíček NuGet NSwag.AspNetCore. Tento balíček obsahuje middleware pro vygenerování a obsluhu specifikace Swaggeru, swagger UI (v2 a v3) a uživatelské rozhraní ReDoc.

K instalaci balíčku NS NuGet použijte jeden z následujících přístupů:

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

    • Přejděte na Zobrazit > ostatní 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 NSwag.AspNetCore
      
  • 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".
    • Do vyhledávacího pole zadejte NSwag.AspNetCore.
    • Na kartě Procházet vyberte balíček NSwag.AspNetCore a klikněte na Nainstalovat.

Přidání a konfigurace middlewaru Swagger

Pomocí následujících kroků přidejte a nakonfigurujte Swagger ASP.NET Core vaší aplikaci:

  • V Startup.ConfigureServices metodě zaregistrujte požadované služby Swagger:
public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<TodoContext>(opt =>
        opt.UseInMemoryDatabase("TodoList"));
    services.AddMvc();

    // Register the Swagger services
    services.AddSwaggerDocument();
}
  • V Startup.Configure metodě povolte middleware pro obsluhu vygenerované specifikace Swaggeru a uživatelského rozhraní Swaggeru:
public void Configure(IApplicationBuilder app)
{
    app.UseStaticFiles();

    // Register the Swagger generator and the Swagger UI middlewares
    app.UseOpenApi();
    app.UseSwaggerUi3();

    app.UseMvc();
}
  • Spustit aplikaci Přejděte na:
    • http://localhost:<port>/swagger pro zobrazení uživatelského rozhraní Swaggeru.
    • http://localhost:<port>/swagger/v1/swagger.json zobrazíte specifikaci Swaggeru.

Generování kódu

Výběrem jedné z následujících možností můžete využít výhod možností generování kódu NS za vás:

Generování kódu pomocí NSmessageStudia

  • Nainstalujte NSstudio podle pokynů v úložišti NSstudio GitHub . Na stránce vydání nástroje NS windows si můžete stáhnout verzi xcopy, kterou můžete spustit bez oprávnění správce a instalace.

  • Spusťte NSstudio a do textovéhoswagger.js Url specifikace Swaggeru zadejte adresu URLswagger.jssouboru. Příklad: http://localhost:44354/swagger/v1/swagger.json.

  • Kliknutím na tlačítko Create local Copy (Vytvořit místní kopii) vygenerování reprezentace specifikace Swagger ve formátu JSON.

    Vytvoření místní kopie specifikace Swaggeru

  • V oblasti Výstupy zaškrtněte políčko Klient CSharp. V závislosti na projektu můžete také zvolit TypeScript Client nebo CSharp Web API Controller. Pokud vyberete kontroler webového rozhraní API CSharp, specifikace služby znovu sestaví službu, která slouží jako zpětná generace.

  • Kliknutím na Vygenerovat výstupy vytvořte úplnou klientskou implementaci projektu TodoApi.NS pro jazyk C#. Pokud chcete zobrazit vygenerovaný kód klienta, klikněte na kartu Klient CSharp:

//----------------------
// <auto-generated>
//     Generated using the NSwag toolchain v12.0.9.0 (NJsonSchema v9.13.10.0 (Newtonsoft.Json v11.0.0.0)) (http://NSwag.org)
// </auto-generated>
//----------------------

namespace MyNamespace
{
    #pragma warning disable

    [System.CodeDom.Compiler.GeneratedCode("NSwag", "12.0.9.0 (NJsonSchema v9.13.10.0 (Newtonsoft.Json v11.0.0.0))")]
    public partial class TodoClient
    {
        private string _baseUrl = "https://localhost:44354";
        private System.Net.Http.HttpClient _httpClient;
        private System.Lazy<Newtonsoft.Json.JsonSerializerSettings> _settings;

        public TodoClient(System.Net.Http.HttpClient httpClient)
        {
            _httpClient = httpClient;
            _settings = new System.Lazy<Newtonsoft.Json.JsonSerializerSettings>(() =>
            {
                var settings = new Newtonsoft.Json.JsonSerializerSettings();
                UpdateJsonSerializerSettings(settings);
                return settings;
            });
        }

        public string BaseUrl
        {
            get { return _baseUrl; }
            set { _baseUrl = value; }
        }

        // code omitted for brevity

Tip

Kód klienta jazyka C# se generuje na základě výběrů na Nastavení kartě. Upravte nastavení pro provádění úloh, jako je přejmenování výchozího oboru názvů a generování synchronní metody.

  • Zkopírujte vygenerovaný kód jazyka C# do souboru v klientském projektu, který bude rozhraní API využívat.
  • Začněte používat webové rozhraní API:
 var todoClient = new TodoClient();

// Gets all to-dos from the API
 var allTodos = await todoClient.GetAllAsync();

 // Create a new TodoItem, and save it via the API.
var createdTodo = await todoClient.CreateAsync(new TodoItem());

// Get a single to-do by ID
var foundTodo = await todoClient.GetByIdAsync(1);

Přizpůsobení dokumentace k rozhraní API

Swagger nabízí možnosti pro dokumentování objektového modelu, aby se usnadnila spotřeba webového rozhraní API.

Informace a popis rozhraní API

V metodě přidá konfigurační akce předaná metodě informace, jako je Startup.ConfigureServices autor, licence a AddSwaggerDocument popis:

services.AddSwaggerDocument(config =>
{
    config.PostProcess = document =>
    {
        document.Info.Version = "v1";
        document.Info.Title = "ToDo API";
        document.Info.Description = "A simple ASP.NET Core web API";
        document.Info.TermsOfService = "None";
        document.Info.Contact = new NSwag.OpenApiContact
        {
            Name = "Shayne Boyer",
            Email = string.Empty,
            Url = "https://twitter.com/spboyer"
        };
        document.Info.License = new NSwag.OpenApiLicense
        {
            Name = "Use under LICX",
            Url = "https://example.com/license"
        };
    };
});

Swagger UI zobrazí informace o verzi:

Uživatelské rozhraní Swagger s informacemi o verzi

Komentáře XML

Pokud chcete povolit komentáře XML, proveďte následující kroky:

  • 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:
<PropertyGroup>
  <GenerateDocumentationFile>true</GenerateDocumentationFile>
  <NoWarn>$(NoWarn);1591</NoWarn>
</PropertyGroup>
  • Klikněte pravým tlačítkem na projekt v Průzkumník řešení vyberte Vlastnosti.
  • V části Výstup na kartě Sestavení zaškrtněte políčko Soubor dokumentace XML.

Datové poznámky

Vzhledem k tomu, že NSdig používá reflexia doporučený návratový typ pro akce webového rozhraní API je IActionResult,nemůže odvodit, co vaše akce dělá a co vrací.

Uvažujte následující příklad:

[HttpPost]
public IActionResult Create([FromBody] TodoItem item)
{
    if (item == null)
    {
        return BadRequest();
    }

    _context.TodoItems.Add(item);
    _context.SaveChanges();

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

Předchozí akce vrátí , ale uvnitř akce vrátí buď IActionResult CreatedAtRoute, nebo BadRequest. Pomocí datových poznámek můžete klientům říct, které stavové kódy HTTP tato akce vrací. Označte akci následujícími atributy:

[ProducesResponseType(typeof(TodoItem), StatusCodes.Status201Created)]  // Created
[ProducesResponseType(StatusCodes.Status400BadRequest)]                 // BadRequest

Vzhledem k tomu, že NSresult používá reflexia doporučený návratový typ pro akce webového rozhraní API je ActionResult <T> , může odvodit pouze návratový typ definovaný parametrem T . Jiné možné návratové typy nelze automaticky odvodit.

Uvažujte následující příklad:

[HttpPost]
public ActionResult<TodoItem> Create(TodoItem item)
{
    _context.TodoItems.Add(item);
    _context.SaveChanges();

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

Předchozí akce vrátí ActionResult<T> . Uvnitř akce vrací CreatedAtRoute. Vzhledem k tomu, že kontroler má atribut , je možná i odpověď [ApiController] BadRequest. Další informace najdete v tématu Automatické odpovědi HTTP 400. Pomocí datových poznámek můžete klientům říct, které stavové kódy HTTP tato akce vrací. Označte akci následujícími atributy:

[ProducesResponseType(StatusCodes.Status201Created)]     // Created
[ProducesResponseType(StatusCodes.Status400BadRequest)]  // BadRequest

V ASP.NET Core 2.2 nebo novějších verzích můžete použít konvence místo explicitního výslovně vychýlování jednotlivých akcí pomocí [ProducesResponseType] . Další informace naleznete v tématu Použití konvencí webového rozhraní API.

Generátor Swagger teď může přesně popsat tuto akci a vygenerovaní klienti vědí, co dostanou při volání koncového bodu. Jako doporučení označte všechny akce pomocí těchto atributů.

Pokyny k odpovědím HTTP, které by měly vaše akce rozhraní API vracet, najdete ve specifikaci RFC 7231.