Passare oggetti complessi nell'ambito di una chiamata GET non è sempre una buona idea, e spesso può essere indice di una cattiva implementazione delle convenzioni REST. Esistono tuttavia sempre delle eccezioni: pensiamo al caso in cui, tramite il nostro endpoint in GET, vogliamo fornire dei filtri di ricerca, per esempio indicando una serie di valori tramite cui filtrare la chiave. In altri termini, vogliamo scrivere una action come quella seguenteç
public IEnumerable<Customer> Get(int[] id) { return db.Customers .Where(x => id.Any(y => y == x.Id); }
ASP.NET Web API supporta nativamente questo scenario e l'unico requisito è specificare che l'array deve essere prelevato dall'URI invece che dal body. Per farlo è sufficiente modificare il metodo in questo modo, inserendo l'attributo FromUri:
public IEnumerable<Customer> Get([FromUri]int[] id) { // ... }
La ragione risiede nel fatto che, per default, i tipi complessi vengono ricercati nel body della richiesta, cosa che ovviamente non ha senso nell'ambito di una richiesta di tipo GET.
A questo punto potremo specificare i valori nell'URL semplicemente ripetendo più volte la chiave id nell'url:
http://localhost:11334/api/customers/?id=1&id=2&id=3
Purtroppo questo formato della querystring può risultare non comodissimo da gestire. In un prossimo script vedremo come renderlo un po' più semplice e meno verboso.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Mascherare l'output di un valore all'interno dei log di un workflow di GitHub
Miglioramenti nell'accessibilità con Angular CDK
Ottenere il contenuto di una cartella FTP con la libreria FluentFTP
Utilizzare Tailwind CSS all'interno di React: primi componenti
Autenticarsi in modo sicuro su Azure tramite GitHub Actions
Effettuare chiamate con versioning da Blazor ad ASP.NET Core
Sviluppare un'interfaccia utente in React con Tailwind CSS e Preline UI
Eseguire un metodo asincrono dopo il set di una proprietà in Blazor 8
Utilizzare le Cache API di JavaScript per salvare elementi nella cache del browser
Registrare servizi multipli tramite chiavi in ASP.NET Core 8
Utilizzare Model as a Service su Microsoft Azure
Code scanning e advanced security con Azure DevOps