Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [Angular 8] Passagio dati da una ASP.NET webapi

    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 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 alla query (quella scritta nell'utente all'interno del campo di testo) 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
    Ultima modifica di PazzoFrontEnd; 24-11-2019 a 11:47

  2. #2
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,673
    ti sposto. cerca di tradurre la parte c# per chi non la capisce

  3. #3
    non si capisce molto bene cosa chiedi.

    cmq di primo acchitto penso che tu debba mandare in output il risultato della query in formato json.
    non inviare un IEnumerable<Dictionary<string, object>.

  4. #4
    No. In realtà non sto inviando un IEnumerable di Dictionary...quella è la result dell'API....è tutto li il problema...non so come tradurlo in observable in angular.

  5. #5
    Quote Originariamente inviata da djciko Visualizza il messaggio
    ti sposto. cerca di tradurre la parte c# per chi non la capisce
    Come posso spostare la discussione sotto Programmazione? forse è un po troppo vasta la domanda per farla ricadere solo in javascript

  6. #6
    Quote Originariamente inviata da PazzoFrontEnd Visualizza il messaggio
    No. In realtà non sto inviando un IEnumerable di Dictionary...quella è la result dell'API....è tutto li il problema...non so come tradurlo in observable in angular.
    non devi tradurre un IEnumerable C# in un Obsrevable Angulare.

    la web api manda i dati in un formato specifico (json o xml) e basta.
    alla parte angular (o client che sia) non interessa come viene creato il json/xml.
    a quel punto ti occupi di Observable.

    per questo dico che non stai specificando bene il problema.

  7. #7
    Ok. E' giusto quello che dici, ho bisogno di avere il risultato della query e per costruire una tabella html necessito di una lista di un particolare costrutto key: value, dove il primo è il nome della colonna, il secondo è la riga implicata.

  8. #8
    Quote Originariamente inviata da djciko Visualizza il messaggio
    ti sposto. cerca di tradurre la parte c# per chi non la capisce
    codice:
     [Route("ExecuteQuery")]
            [HttpPost]
            //[Authorize]
            public async Task<IEnumerable<Dictionary<string, object>>> ExecuteQuery([FromBody] QueryParameter parameter)
            {
                // QUESTO METODO MI RESTITUISCE UNA TABELLA (DEL TIPO .NET DataTable) 
                // IN BASE ALLA CONNECTION STRING (PER APRIRE LA CONNESIONE CON IL db) 
                // E LA QUERY LANCIATA (DALL'UTENTE MEDIANTE UI) PRESENTI NELL'OGGETTO CHE PASSO DI TIPO QueryParameter --> parameter
                DataTable dt = await new DAL(_cfg).ExecuteQuery(parameter.BusinessItem, parameter.Query); 
    
    
                // ISTANZIO UNA LISTA DI DICTIONARY<KEY, VALUE>
                List<Dictionary<string, object>> result = new List<Dictionary<string, object>>();
    
    
                // DICHIARO UN DICTIONARY DOVE KEY è string, VALUE è object
                Dictionary<string, object> item = null;
    
    
                foreach (DataRow dr in dt.Rows)  // PER OGNI RIGA DELLA TABELLA (dt.Rows)
                {
                    foreach (DataColumn dc in dt.Columns)  // PER OGNI COLONNA DELLA TABELLA (dt.Columns)
                    {
                        item.Add(dc.ColumnName, dr[dc]); // AGGIUNGO UN ELEMENTO AL DICTIONARY key = colonna.NomeColonna, riga[colonna]
                    }
    
    
                    result.Add(item); // ALLA FINE AGGIUNGO IL DICTIONARY ALLA LISTA
                }
    
    
                return result; // LA RESULT E' LA LISTA POPOLATA DI DICTIONARY
            }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2020 vBulletin Solutions, Inc. All rights reserved.