Nel contesto delle applicazioni web basate su ASP.NET Core, il termine pipeline si riferisce alla serie di middleware che processano una richiesta HTTP. Ogni middleware ha la possibilità di passare la richiesta al successivo middleware nella catena o di "interrompere" il flusso, terminando il processo. Quest'ultimo concetto è noto come "short-circuiting".
Immaginiamo per esempio di voler proteggere la nostra API con una API Key, che il client dovrà passare tramite header. Se vogliamo ottimizzare al massimo le prestazioni, potrebbe essere sconveniente creare una custom Authorization come abbiamo visto in uno script in passato (https://www.aspitalia.com/script/1325/Supportare-Autenticazione-Basata-API-Key-ASP.NET-Core.aspx).
Una soluzione, invece, è quella di creare un Middleware che verifichi la chiave, e che nel caso questa verifica fallisca, interrompa la pipeline e risponda immediatamente con un errore:
public class ApiKeyMiddleware
{
// altro codice qui...
public async Task InvokeAsync(HttpContext context)
{
var apiKey = context.Request.Headers["ApiKey"].FirstOrDefault();
if (string.IsNullOrEmpty(apiKey) || !ApiKeyIsValid(apiKey))
{
context.Response.StatusCode = 401; // Non Autorizzato
await context.Response.WriteAsync("Chiave API non valida o mancante.");
return; // Short-circuiting qui
}
await _next(context); // passa al prossimo middleware se la chiave API è valida
}
}
Nell'esempio in alto, abbiamo recuperato il valore della chiave e, in caso la verifica non abbia successo, effettuiamo un return senza invocare il successivo middleware. Questo fa sì che l'intera pipeline di risposta venga interrotta, senza processare ulteriori middleware.
Ovviamente, dovremo registrare il nuovo middleware avendo cura di farlo nella posizione corretta, per esempio subito dopo l'HTTPS redirect:
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
// ... services ...
var app = builder.Build();
// Configure the HTTP request pipeline.
app.UseHttpsRedirection();
app.UseMiddleware<ApiKeyMiddleware>();
// .. altro codice qui ..
app.MapControllers();
app.Run();
}Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Impostare la content-visibility in CSS per ottimizare il rendering iniziale di una pagina
Modificare lo stile in una QuickGrid Blazor
Arricchire l'interfaccia di .NET Aspire
Welcome to Future Dev Day 2026
.NET Aspire vs Dapr: differenze, sovrapposizioni e integrazione
Utilizzare le librerie native di .NET per comprimere uno o più file in formato ZIP
Blue/Green Release in locale con .NET Aspire
Ottimizzare le API in ASP.NET con Feature Flags
Middleware e telemetria alle chiamate AI con Microsoft.Extensions.AI
Creare un extension method per applicare condizionalmente una Where in una query LINQ per Entity Framework
Creare una UI per i tool MCP con resource e Azure Functions
Ottimizzare la content-visibility in CSS specificando lo spazio da occupato dall'area non renderizzata
I più letti di oggi
- Effettuare il multi-checkout in linea nelle pipeline di Azure DevOps
- Accedere a risorse e immagini in Windows Store app di Windows 8
- Alleggerire le applicazioni WPF sfruttando gli oggetti Freezable
- Permettere il Drag-and-drop solo su zone predefinite con Silverlight 2.0
- Consumare dati binari in realtime lato client con ASP.NET Core SignalR
- Effetto turnstile su tutte le pagine con il Windows Phone Toolkit
- Personalizare l'icona e le funzionalità di un sito web per iOS e IE
- Caricamenti veloci da CDN e fallback locale con ASP.NET Core
- Utilizzare dati in formato XML in XAML
- Accedere a dati esposti con WebService con Silverlight 1.0


