Binding automatico dei parametri in ASP.NET Core 2.1

di Moreno Gentili, in ASP.NET Core,

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

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi