Swagger/OpenAPI генерация для C# (.NET): Swashbuckle и NSwag

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Swagger/OpenAPI генерация для C# (.NET): Swashbuckle и NSwag

Документирование REST API — неотъемлемая часть современной разработки на C# (.NET). Спецификация OpenAPI (ранее известная как Swagger) позволяет описать эндпоинты, модели данных, параметры и ответы в едином, машиночитаемом формате (JSON/YAML). В экосистеме .NET Core / .NET 5+ существуют два основных инструмента для автоматической генерации OpenAPI-спецификации: Swashbuckle.AspNetCore и NSwag. Оба инструмента интегрируются в ASP.NET Core, анализируют ваш код и создают интерактивную документацию (Swagger UI).

Swashbuckle.AspNetCore: классический выбор

Swashbuckle — самый популярный пакет для генерации Swagger/OpenAPI в .NET. Он автоматически строит спецификацию на основе контроллеров, атрибутов маршрутизации и аннотаций к моделям. Поддерживает OpenAPI 3.0 и Swagger 2.0.

Установка и базовая настройка

dotnet add package Swashbuckle.AspNetCore

В файле Program.cs (или Startup.cs для старых версий) добавьте сервисы и middleware:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new OpenApiInfo
    {
        Title = "Мое API",
        Version = "v1",
        Description = "Пример API для образовательного сайта"
    });
});

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI(c =>
    {
        c.SwaggerEndpoint("/swagger/v1/swagger.json", "Мое API v1");
    });
}

app.MapControllers();
app.Run();

После запуска перейдите по адресу /swagger — откроется интерактивный UI, где можно тестировать эндпоинты прямо из браузера.

Добавление комментариев XML

Чтобы в документацию попали описания из XML-комментариев, включите генерацию XML в .csproj:

<PropertyGroup>
  <GenerateDocumentationFile>true</GenerateDocumentationFile>
</PropertyGroup>

Затем укажите путь к XML-файлу в AddSwaggerGen:

builder.Services.AddSwaggerGen(c =>
{
    var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
    var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
    c.IncludeXmlComments(xmlPath);
});

Теперь комментарии из кода будут отображаться в Swagger UI.

Пример контроллера с аннотациями

[ApiController]
[Route("api/[controller]")]
public class ProductsController : ControllerBase
{
    /// <summary>
    /// Получить список всех продуктов
    /// </summary>
    [HttpGet]
    public ActionResult<IEnumerable<Product>> GetAll()
    {
        return Ok(new List<Product>());
    }

    /// <summary>
    /// Получить продукт по ID
    /// </summary>
    /// <param name="id">Идентификатор продукта</param>
    [HttpGet("{id}")]
    public ActionResult<Product> GetById(int id)
    {
        return Ok(new Product { Id = id, Name = "Пример" });
    }
}

NSwag: универсальный инструмент с генерацией клиентов

NSwag — более мощная альтернатива. Помимо генерации документации, он умеет создавать C#-клиенты для API, TypeScript-клиенты, а также генерировать код на основе внешних OpenAPI-спецификаций.

Установка и настройка

dotnet add package NSwag.AspNetCore

Настройка в Program.cs:

builder.Services.AddOpenApiDocument(config =>
{
    config.Title = "Мое API (NSwag)";
    config.Version = "v1";
    config.Description = "API, сгенерированное с помощью NSwag";
});

// ...

if (app.Environment.IsDevelopment())
{
    app.UseOpenApi();
    app.UseSwaggerUi3(); // или app.UseSwaggerUi();
}

NSwag автоматически поддерживает OpenAPI 3.0. UI доступен по адресу /swagger.

Генерация клиента на C#

NSwag позволяет сгенерировать C#-клиент для вашего API прямо из командной строки или через MSBuild:

nswag aspnetcore /runtime:Net60 /assembly:MyApi.dll /output:client.cs

Или используйте файл конфигурации nswag.json:


                
    
    

Рекомендаций