Створення Middleware для логування запитів в ASP.NET Core
Middleware в ASP.NET Core дозволяє обробляти HTTP запити та відповіді на різних етапах їх життєвого циклу. Логування вхідних запитів може бути дуже корисним для налагодження, аудиту чи моніторингу продуктивності вашого додатку. У цьому пості ми розглянемо, як створити власне middleware для логування запитів у додатку ASP.NET Core.
Що таке Middleware?
Middleware в ASP.NET Core — це програмне забезпечення, яке додається до конвеєра додатку для обробки запитів та відповідей. Кожен компонент middleware вирішує, чи передавати запит наступному компоненту в конвеєрі, і може виконувати дії до або після того, як наступний компонент обробить запит.
Налаштування проекту
Щоб розпочати, переконайтеся, що у вас встановлений .NET SDK. Ви можете створити новий проект ASP.NET Core за допомогою наступної команди:
> dotnet new webapi -n RequestLoggingDemo
Перейдіть до каталогу проекту:
> cd RequestLoggingDemo
Крок 1: Створення Middleware
Почнімо з того, що створимо новий файл під назвою RequestLoggingMiddleware.cs
в корені вашого проекту (або в папці Middleware
, якщо ви хочете організувати код).
Ось код для цього middleware:
using Microsoft.AspNetCore.Http;
using System.Threading.Tasks;
using System.IO;
using Microsoft.Extensions.Logging;
public class RequestLoggingMiddleware
{
private readonly RequestDelegate _next;
private readonly ILogger _logger;
public RequestLoggingMiddleware(RequestDelegate next, ILogger logger)
{
_next = next;
_logger = logger;
}
public async Task InvokeAsync(HttpContext context)
{
context.Request.EnableBuffering();
// Читання тіла запиту (якщо воно є)
string requestBody;
using (var reader = new StreamReader(
context.Request.Body,
encoding: System.Text.Encoding.UTF8,
detectEncodingFromByteOrderMarks: false,
bufferSize: 1024,
leaveOpen: true))
{
requestBody = await reader.ReadToEndAsync();
context.Request.Body.Position = 0; // Скидання позиції потоку
}
// Логування деталей запиту
_logger.LogInformation($"HTTP {context.Request.Method} {context.Request.Path} {context.Request.QueryString}\nBody: {requestBody}");
// Виклик наступного middleware в конвеєрі
await _next(context);
}
}
Крок 2: Додавання Middleware до конвеєра
У ASP.NET Core middleware додаються до конвеєра в файлі Program.cs
. Оновіть ваш Program.cs
, щоб додати middleware:
var builder = WebApplication.CreateBuilder(args);
// Додавання сервісів до контейнера
builder.Services.AddControllers();
// Додавання логування
builder.Logging.AddConsole();
var app = builder.Build();
// Додавання кастомного middleware
app.UseMiddleware<RequestLoggingMiddleware>();
// Налаштування конвеєра обробки запитів
if (app.Environment.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
Крок 3: Запуск та тестування
Запустіть ваш додаток за допомогою наступної команди:
> dotnet run
Відправте запит до вашого API за допомогою інструменту, такого як Postman або curl
. Наприклад:
curl -X POST https://localhost:5001/api/values -d '{"key": "value"}' -H "Content-Type: application/json"
Перевірте ваші консольні логи, щоб побачити деталі запиту:
info: RequestLoggingMiddleware[0]
HTTP POST /api/values
Body: {"key": "value"}
Налаштування middleware
Ви можете покращити middleware, щоб логувати додаткову інформацію, таку як заголовки або деталі відповіді.
Наприклад, ви можете логувати код статусу та тіло відповіді, обгортаючи _next(context)
в блок try-finally
і захоплюючи потік відповіді.
Висновок
Створення власного middleware в ASP.NET Core — це простий спосіб розширити функціональність вашого додатку. З middleware для логування запитів ви можете отримати краще розуміння запитів, які обробляє ваш додаток, що робить налагодження та моніторинг значно зручнішими. Спробуйте експериментувати з цим middleware і налаштуйте його під ваші специфічні потреби!
Для додаткової інформації відвідайте chrishibler.com
Перекладено з: ASP.NET Core Request Logging