Ciao Salvo,
sì, le razor pages possono restituire json e, tipicamente, le sfrutti così quando sei tu stesso sia il creatore che l'utilizzatore finale del contenuto json. Faccio un esempio: stai realizzando la pagina di ricerca di un sito web e vuoi fare in modo che compaiano dei suggerimenti mentre l'utente digita qualcosa nella casella. In questo caso, ad ogni carattere digitato dall'utente, puoi inviare una richiesta ajax al metodo di una razor page e ottenere da essa il json contenente i suggerimenti.
Quindi diciamo che il metodo che restituisce json è comunque funzionale a creare una migliore esperienza di utilizzo per l'utente di un SITO WEB.
Cosa diversa invece è una Web API: i suoi utenti non sono persone ma sono altre applicazioni di terze parti. Si realizza una API quando si vuole consentire a terzi di accedere ai dati dell'applicazione ed eventualmente manipolarli in qualche modo. Si usa spesso quando si vuole integrare l'applicazione con sistemi esistenti, cosa imprescindibile per ogni applicazione moderna.
Ipotizziamo che tu debba realizzare una Web API, in modo che la mia applicazione si possa collegare alla tua per ottenere dei dati. Per poter fare bene e velocemente il mio lavoro, ho bisogno che tu mi esponga una documentazione Swagger/OpenAPI, in modo che io possa capire che richieste HTTP inviare alla tua API.
Se realizzi la API con razor pages, non hai modo di produrre automaticamente questa documentazione e, nel migliore dei casi gli sviluppatori ti inveiranno contro per ore e ore ad infinitum. Nel peggiore dei casi, il tuo prodotto verrà considerato scadente e acquisirai perciò molti meno clienti.
Quindi, in base a qual è il tuo scenario, puoi scegliere se far restituire json a una razor page o a una web api. Nel caso volessi realizzare una Web api, ecco uno script di Marco che ti mostra quanto è facile generarla.
http://www.aspitalia.com/script/1301/Documentare-Web-API-Swagger-ASP.NET-Core-2.1.aspxInoltre, usare un ApiController ti dà delle agevolazioni particolari di cui puoi leggere qui:
http://www.aspitalia.com/script/1298/Binding-Automatico-Parametri-ASP.NET-Core-2.1.aspxhttp://www.aspitalia.com/script/1297/Validazione-Automatica-Parametri-Web-API-ASP.NET-Core-2.1.aspxhttp://www.aspitalia.com/script/1299/Gestire-Upload-File-Controller-Web-API-ASP.NET-Core-2.1.aspxciao,
Moreno