Quando dobbiamo leggere il valore di un header della richiesta, in ASP.NET Core 6 abbiamo a disposizione diverse soluzioni.
Una di queste è sicuramente quella di andare a ispezionare l'HttpContext corrente, e più nello specifico, l'oggetto HttpRequest.
Ma l'alternativa di gran lunga più comoda è quella di lasciare quest'incombenza al motore di binding, e limitarci ad aggiungere un parametro decorato con l'attributo FromHeader:
[HttpGet] public IEnumerable<WeatherForecast> Get([FromHeader(Name = "X-MY-CUSTOM-HEADER")] string? someValue) { _logger.LogInformation("header received {header}", someValue); return Enumerable.Range(1, 5).Select(index => new WeatherForecast { Date = DateTime.Now.AddDays(index), TemperatureC = Random.Shared.Next(-20, 55), Summary = Summaries[Random.Shared.Next(Summaries.Length)] }) .ToArray(); }
Questa modalità funziona sia nel caso dei classici controller, sia nel caso di Minimal API, come possiamo vedere dal codice in basso:
app.MapGet("/people/{id}", (ILogger<Program> logger, [FromHeader(Name = "X-MY-CUSTOM-HEADER")] string? someValue, int id) => { logger.LogInformation($"/people invoked with parameter {id} and header {someValue}"); if (id == 0) return Results.NotFound(); return Results.Json(new Person { Name = "Marco" }); });
Attenzione a ricordarci di dichiarare la string come nullable (quindi utilizzando il formato string?), altrimenti il routing considererà questo parametro come obbligatorio.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Creare una libreria CSS universale: Nav menu
Conoscere il rendering Server o WebAssembly a runtime in Blazor
Utilizzare Locust con Azure Load Testing
Generare HTML a runtime a partire da un componente Razor in ASP.NET Core
Gestione file Javascript in Blazor con .NET 9
Utilizzare i variable font nel CSS
Introduzione ai web component HTML
Gestire il colore CSS con HWB
Generare velocemente pagine CRUD in Blazor con QuickGrid
Usare i settings di serializzazione/deserializzazione di System.Text.Json di ASP.NET all'interno di un'applicazione non web
Gestione dei nomi con le regole @layer in CSS