26 марта 2025

📝 Создаем красивую документацию API с помощью Scalar в ASP.NET Core

Делаю игры и пишу про игры
Устали от скучного Swagger UI? Добро пожаловать в новый мир API-документации с ярким и современным интерфейсом Scalar, который изменит ваше представление о том, как должна выглядеть документация API!
📝 Создаем красивую документацию API с помощью Scalar в ASP.NET Core

Scalar — это инструмент, который помогает создавать привлекательную документацию для наших API. В отличие от стандартной документации Swagger, которая может выглядеть немного устаревшей, Scalar предлагает свежий, современный интерфейс. Благодаря аккуратному дизайну разработчикам проще находить нужные API для тестирования.

В этой статье мы рассмотрим, как использовать Scalar для документирования API в ASP.NET Core Web API, чтобы заменить стандартный Swagger UI.

Данная статья является переводом другой статьи. С оригиналом вы можете ознакомиться по ссылке.

Установка Scalar

Откройте NuGet Package Manager, найдите и установите пакет Scalar.AspNetCore:

Установка Scalar
Установка Scalar

Настройка Scalar

Откройте файл Program.cs и замените конфигурацию Swagger по умолчанию.

Было так:

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

А должно стать так:

        app.UseSwagger(opt =>
{
    opt.RouteTemplate = "openapi/{documentName}.json";
});
app.MapScalarApiReference(opt =>
{
    opt.Title = "Scalar Example";
    opt.Theme = ScalarTheme.Mars;
    opt.DefaultHttpClient = new(ScalarTarget.Http, ScalarClient.Http11);
});
    
#️⃣ Библиотека шарписта
Больше полезных материалов вы найдете на нашем телеграм-канале «Библиотека шарписта»

Аутентификация Bearer

Мы также можем добавить заголовок аутентификации Bearer в документацию Scalar. Просто замените в Program.cs конфигурацию builder.Services.AddSwaggerGen(); на такую:

        builder.Services.AddSwaggerGen(opt => 
{
    opt.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
    {
        BearerFormat = "JWT",
        Description = "JWT Authorization header using the Bearer scheme.",
        Name = "Authorization",
        In = ParameterLocation.Header,
        Type = SecuritySchemeType.Http,
        Scheme = "Bearer"
    });
    opt.AddSecurityRequirement(new OpenApiSecurityRequirement
    {
        {
            new OpenApiSecurityScheme
            {
                Reference = new OpenApiReference
                {
                    Id = "Bearer",
                    Type = ReferenceType.SecurityScheme
                }
            },
            Array.Empty<string>()
        }
    });
});

    

Ниже приведён полный файл Program.cs с нужными изменениями:

        using Microsoft.OpenApi.Models;
using Scalar.AspNetCore;

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();

builder.Services.AddSwaggerGen(opt => 
{
    opt.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
    {
        BearerFormat = "JWT",
        Description = "JWT Authorization header using the Bearer scheme.",
        Name = "Authorization",
        In = ParameterLocation.Header,
        Type = SecuritySchemeType.Http,
        Scheme = "Bearer"
    });
    opt.AddSecurityRequirement(new OpenApiSecurityRequirement
    {
        {
            new OpenApiSecurityScheme
            {
                Reference = new OpenApiReference
                {
                    Id = "Bearer",
                    Type = ReferenceType.SecurityScheme
                }
            },
            Array.Empty<string>()
        }
    });
});

var app = builder.Build();

app.UseSwagger(opt =>
{
    opt.RouteTemplate = "openapi/{documentName}.json";
});
app.MapScalarApiReference(opt =>
{
    opt.Title = "Scalar Example";
    opt.Theme = ScalarTheme.Mars;
    opt.DefaultHttpClient = new(ScalarTarget.Http, ScalarClient.Http11);
});

app.UseHttpsRedirection();

app.UseAuthorization();

app.MapControllers();

app.Run();

    

Настройки запуска

Чтобы Scalar автоматически открывался при запуске приложения, нужно скорректировать файл LaunchSettings.json, который находится в папке Properties.

Настройки запуска
Настройки запуска

Откройте LaunchSettings.json и замените "launchUrl": "swagger" на "launchUrl": "scalar/v1":

        {
  "$schema": "http://json.schemastore.org/launchsettings.json",
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:39471",
      "sslPort": 44375
    }
  },
  "profiles": {
    "http": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": true,
      "launchUrl": "scalar/v1",
      "applicationUrl": "http://localhost:5290",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "https": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": true,
      "launchUrl": "scalar/v1",
      "applicationUrl": "https://localhost:7242;http://localhost:5290",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "scalar/v1",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}
    

Запуск приложения

Теперь запускаем приложение:

Запуск приложения
Запуск приложения

Пример тестового запроса:

Пример тестового запроса
Пример тестового запроса

Наша документация для API теперь выглядит потрясающе!

Использование Scalar для документирования API даёт множество преимуществ и упрощает работу разработчиков. Интерфейс выглядит красиво, в боковом меню легко найти нужные разделы без постоянной прокрутки, а функция Test Request позволяет сразу тестировать эндпоинты из документации.

Исходный код проекта можно найти здесь.

#️⃣🎓 Библиотека C# для собеса
Подтянуть свои знания по C# вы можете на нашем телеграм-канале «Библиотека C# для собеса»
#️⃣🧩 Библиотека задач по C#
Интересные задачи по C# для практики можно найти на нашем телеграм-канале «Библиотека задач по C#»

Как вы думаете, станет ли Scalar новым стандартом для документирования API в .NET-проектах? Почему да или почему нет?

 
 

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ

Подпишись

на push-уведомления