Middleware i żądania HTTP
Middleware w ASP.NET Core to oprogramowanie, które przetwarza żądania HTTP i generuje odpowiedzi. Każde żądanie HTTP w aplikacji ASP.NET Core przechodzi przez zestaw middleware'ów, które przetwarzają żądanie i/lub odpowiedź.Można utworzyć niestandardowe middleware'y w celu wykonywania określonych operacji, takich jak logowanie, uwierzytelnianie, weryfikacja uprawnień i wiele innych.
Aby utworzyć niestandardowe middleware w ASP.NET Core, należy utworzyć klasę, która implementuje interfejs IMiddleware, a następnie zarejestrować ją w kolekcji middleware'ów w metodzie Configure klasy Startup.
Utworzenie middleware do logowania żądań HTTP:
public class LoggingMiddleware : IMiddleware
{
private readonly ILogger<LoggingMiddleware> _logger;
public LoggingMiddleware(ILogger<LoggingMiddleware> logger)
{
_logger = logger;
}
public async Task InvokeAsync(HttpContext context, RequestDelegate next)
{
_logger.LogInformation($"Handling HTTP request: {context.Request.Method} {context.Request.Path}");
await next(context);
}
}
W tym przykładzie utworzono klasę LoggingMiddleware, która implementuje interfejs IMiddleware. Konstruktor klasy przyjmuje interfejs ILogger, który umożliwia zapisywanie logów. Metoda InvokeAsync zawiera kod, który loguje informacje o żądaniu HTTP, a następnie wywołuje kolejny middleware w łańcuchu.
Rejestracja middleware'u w klasie Startup, w metodzie Configure:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// ...
app.UseMiddleware<LoggingMiddleware>();
// ...
}
W tym przykładzie zarejestrowano middleware LoggingMiddleware za pomocą metody UseMiddleware na obiekcie IApplicationBuilder.
Kolejność rejestracji middleware'ów jest ważna, ponieważ każdy middleware w łańcuchu przetwarza żądanie HTTP w kolejności rejestracji.
Można również wykorzystać wbudowane middleware'y w ASP.NET Core do przetwarzania żądań HTTP i odpowiedzi. Na przykład, middleware UseRouting służy do przetwarzania routingu żądań HTTP, a middleware UseEndpoints służy do przetwarzania żądań HTTP i generowania odpowiedzi.