Nello script precedente, ci siamo occupati del nuovo attributo ApiController in ASP.NET Core 2.1 e abbiamo visto come permetta la validazione automatica dei parametri di ingresso a una action Web API.
Ogni action può avere uno o più parametri che il model binder di ASP.NET Core valorizza attingendo da varie fonti della richiesta HTTP, come dal corpo o dall'URL. Usando l'attributo ApiController, la logica di selezione delle binding source viene ridefinita in questo modo:
- Nel caso di parametri di tipo base (es. int, DateTime, string, ...) i valori vengono cercati nella route o in query string;
- In caso di parametri di tipo complesso (es. ProductCreationModel), il valore viene deserializzato dal corpo JSON della richiesta.
Grazie a queste agevolazioni, non è più necessario annotare esplicitamente i parametri con gli attributi FromBody o FromRoute. Tuttavia, questo implica che l'action non sarà più in grado di ricevere dati da un form, ovvero da richieste inviate con Content-Type: application/x-www-form-urlencoded.
Per ovviare a questo problema possiamo annotare i parametri con l'attributo FromForm, come nel seguente esempio.
[HttpPost, Route("verify")] public ActionResult<VerificationResultDto> VerifyManufacturerCode([FromForm] string manufacturerCode) { //... }
In alternativa, possiamo disabilitare globalmente la nuova logica di selezione delle binding source agendo dalle opzioni.
services.Configure<ApiBehaviorOptions>(options => { options.SuppressInferBindingSourcesForParameters = true; });
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Disabilitare automaticamente un workflow di GitHub
Inference di dati strutturati da testo con Semantic Kernel e ASP.NET Core Web API
Supportare lo HierarchyID di Sql Server in Entity Framework 8
Referenziare un @layer più alto in CSS
Collegare applicazioni server e client con .NET Aspire
Gestione dei nomi con le regole @layer in CSS
Gestire gli accessi con Token su Azure Container Registry
Utilizzare l'espressione if inline in una pipeline di Azure DevOps
Path addizionali per gli asset in ASP.NET Core MVC
Introduzione alle Container Queries
Usare i servizi di Azure OpenAI e ChatGPT in ASP.NET Core con Semantic Kernel
Creare una libreria CSS universale: Nav menu