Passagio dati complessi tra una ASP.NET webapi e Angular

PazzoFrontEnd

Utente Attivo
8 Ott 2013
46
0
6
Buongiorno,
chiedo scusa anticipatamente se ho sbagliato sezione, ma non sapevo se postarla qui o in javascript.
Sto creando una web app dove la parte server è in asp.net core e la parte client in angular 7-8. Spiego l'applicazione brevemente: essa si occupa di interfacciarsi con il DB per vari motivi e nello specifico il mio problema sorge quando sulla pagina web inserisco in un campo di testo una query (esempio SELECT top 100 * from pippo) e cliccando su un bottone un servizio Angular si occupa di chiamare una webapi che mi deve restituire una IEnumerable<Dictionary<string, object> passandogli un oggetto complesso:

Codice:
       [HttpPost]
       //[Authorize]
       public async Task<IEnumerable<Dictionary<string, object>>> ExecuteQuery([FromBody]  queryParameter parameter)
       {
           DataTable dt = await new DAL(_cfg).ExecuteQuery(parameter.BusinessItem, parameter.Query);

           List<Dictionary<string, object>> result = new List<Dictionary<string, object>>();

           Dictionary<string, object> item = null;

           foreach (DataRow dr in dt.Rows)
           {
               foreach (DataColumn dc in dt.Columns)
               {
                   item.Add(dc.ColumnName, dr[dc]);
               }

               result.Add(item);
           }

           return result;
       }

La result del metodo mi deve restituire una List<Dictionary<NomeColonna, RigaDatabase>> in base query passata nell'oggetto complesso come parametro (insieme ad altre cose). Il tutto mi serve per popolare una tabella html sulla mia pagina web.

Il problema sorge in Angular. Come faccio a restituire un Observable che mi mappi il Dictionary della mia webapi?

Codice:
 executeQuery(parameter: QueryParameter): Observable<????> {
       return this.http.post<????>('api/main/ExecuteQuery', parameter);
 }

Chiaramente sarà poi compito del mio componente fare una subscribe e popolare una variabile oggetto per popolare la tabella. Qualcuno può aiutarmi? Ho seri problemi a capire come chiudere il cerchio. Grazie mille e buona giornata
 
Credo che la soluzione più veloce in questo caso (ma non la più "bella") sarebbe quella di utilizzare il tipo any per l'Observable, questo ti permette poi nel componente/html di utilizzare i nomi di proprietà in-line scrivendo praticamente quelli che vuoi.

La soluzione bella sarebbe quella di fare un viewmodel (sia lato API che lato Angular) e far restituire quello dalle API, quindi poi avrai un Observable<TuoViewModel[]>
 

Discussioni simili