In questa seconda ed ultima parte, vedremo come utilizzare i servizi web api creati nel precedente articolo, per gestire le informazioni contenuti nel database MongoDB Community.
In particolare, vedremo come da un progetto di tipo “Windows Application”, possiamo eseguire operazioni CRUD, richiamando i vari metodi del servizio.
Tramite l’ambiente di sviluppo “Visual Studio 2022 Community” e l’ultima versione del Framework .Net, nel momento in cui è pubblicato l’articolo è la 9, richiameremo tramite i vari pulsanti i metodi del servizio.
Creazione del progetto
Si crea un nuovo progetto di tipo “Window Application” selezionando come modello “App Windows Forms”, dopo aver selezionato tale modello , fare click sul pulsante “Avanti”, nella schermata successiva, impostiamo un nome al progetto, e facciamo click sul pulsante “Avanti”. Nella schermata successiva, che è anche l’ultima, selezioniamo l’ultima versione del Framework, nel nostro caso è la 9. Facciamo click sul pulsante “Crea”.
Aggiungiamo al progetto, un controllo datagridView, impostando la proprietà “Name” con il valore “DtgDati”, e la proprietà “dock” con il valore “top”. Aggiungiamo due label, con la proprietà impostata rispettivamente “Nome” e l’altro controllo con il valore “Cognome”, e due controlli di tipo “textbox”, con la proprietà “Name” impostata con “TxtNome”, e l’altro controllo con la proprietà “Name” impostata con “TxtCognome”.
Aggiungiamo tre controlli di tipo “Button”, e nella proprietà “name” impostiamo il valore “BtnWebApiMetodoInsert”, per un controllo, il valore “BtnWebAPIMetodoDelete” per un altro controllo, ed il valore “BtnWebAPIMetodoUpdate”. Impostiamo per ogni controllo la proprietà “text” rispettivamente con il valore “Web API metodo Insert”, “Web API metodo Delete” e “Web API metodo Update”, il progetto sarà come mostrato in figura 1.

Figura 1 – La form con i relativi controlli
Aggiungiamo al progetto il pacchetto nuget per la gestione dei formati Json, dalla finestra Nuget, inseriamo il pacchetto Newtonsoft.Json”, il tutto come mostrato in figura 2.

Figura 2 – Il pacchetto per la gestione dei formati Json
Stesura del codice
Terminata la creazione del progetto, non resta che scrivere il codice, la prima operazione da fare, è aggiungere lo spazio dei nomi del pacchetto aggiunto poco fa. Passiamo in visualizzazione codice, ed in alto, sopra ad ogni dichiarazione, inseriamo il seguente namespace.
C#
using Newtonsoft.Json;
Sempre restando in visualizzazione codice, scriviamo una classe che farà da contenitore dei dati, e che mapperà la collection.
La classe, la possiamo utilizzare nella stessa form, oppure in un file separato, a descrizione del lettore.
Di seguito si riporta la mappa per la gestione dei dati.
C#
public class Dati
{
public string Id { get; set; }
public string nome { get; set; }
public string cognome { get; set; }
public string email { get; set; }
public DateTime data_nascita { get; set; }
}
Continuando a rimanere nella form, nella stessa classe inseriamo una procedura che avrà il compito di leggere i dati dal database, e sarà richiamata nell’evento load della form e nelle varie operazioni di inserimento, modifica e cancellazione dei dati.
La funzione effettuerà una chiamata di tipo “Get” al metodo web api, creato nel precedente articolo per estrapolare i dati.
Di seguito si riporta il frammento di codice delle suddette operazioni.
C#
private void CaricaDati()
{
//Richiamo il metodo get della Web API
try
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("http://localhost:5081/"); //Indirizzo della Web API
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
//Eseguo la chiamata al metodo Get
HttpResponseMessage response = client.GetAsync("api/daticontrollers").Result;
if (response.IsSuccessStatusCode)
{
var datiJson = response.Content.ReadAsStringAsync().Result;
var listaDati = JsonConvert.DeserializeObject<List<Dati>>(datiJson);
DtgDati.DataSource = null;
DtgDati.DataSource = listaDati;
}
else
{
MessageBox.Show("Errore nella chiamata alla Web API: " + response.StatusCode);
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Passiamo in visualizzazione grafica, e facciamo dopo click in una qualunque parte della form, in modo da passare in visualizzazione codice nell’evento load della form.
In questo evento viene richiamato il metodo per la lettura dei dati che verranno visualizzati nella griglia.
Di seguito si riportano il frammento di codice delle suddette operazioni.
C#
private void Form1_Load(object sender, EventArgs e)
{
CaricaDati();
}
Ritorniamo in visualizzazione grafica, e facciamo doppio click sul pulsante di inserimento dati, in modo da passare in visualizzazione codice nell’evento click del pulsante.
In questo evento si crea un oggetto della classe dati, impostando i campi nome e cognome con i valori presenti nelle caselle di testo, il campo email, con un valore preso da nome e cognome, ed il campo data di nascita, con la data odierna.
Tramite una chiamata di tipo “Post” trasformando in un formato json l’oggetto con i dati, verrà inserito il dato nella collection di MongoDB Community.
Di seguito si riporta il codice delle suddette operazioni.
C#
private void BtnWebApiMetodoInsert_Click(object sender, EventArgs e)
{
//Richiamo il metodo web api per l'inserimento del dato
try
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("http://localhost:5081/"); //Indirizzo della Web API
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
//Eseguo la chiamata al metodo post
var nuovoDato = new Dati
{
nome = TxtNome.Text,
cognome = TxtCognome.Text,
email = $"{TxtNome.Text}{TxtCognome.Text}@dominio.it",
data_nascita = DateTime.Now
};
var json = JsonConvert.SerializeObject(nuovoDato);
var content = new StringContent(json, System.Text.Encoding.UTF8, "application/json");
HttpResponseMessage response = client.PostAsync("api/daticontrollers", content).Result;
if (response.IsSuccessStatusCode)
{
response = client.GetAsync("api/daticontrollers").Result;
if (response.IsSuccessStatusCode)
{
CaricaDati();
}
else
{
MessageBox.Show("Errore nella chiamata alla Web API: " + response.StatusCode);
}
}
else
{
MessageBox.Show("Errore nella chiamata alla Web API: " + response.StatusCode);
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Passiamo in visualizzazione grafica, e facciamo click sul pulsante per la cancellazione del dato, quello relativo a "Delete”.
In questo caso, tramite l’operazione DeleteAsync, passando l’id della riga selezionata della griglia, verrà cancellato in dato.
Di seguito si riporta il frammento di codice per invocare il metodo web api per la cancellazione del dato.
C#
private void BtnWebAPIMetodoDelete_Click(object sender, EventArgs e)
{
//Elimino il dato tramite la web api
try
{
if (DtgDati.SelectedRows.Count == 0)
{
MessageBox.Show("Selezionare una riga da eliminare");
return;
}
var selectedRow = DtgDati.SelectedRows[0];
var idSelezionato = selectedRow.Cells[0].Value.ToString();
if (string.IsNullOrEmpty(idSelezionato))
{
MessageBox.Show("record non trovato");
return;
}
string id = idSelezionato;
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("http://localhost:5081/"); //Indirizzo della Web API
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
//Eseguo la chiamata al metodo delete
HttpResponseMessage response = client.DeleteAsync($"api/daticontrollers/{id}").Result;
if (response.IsSuccessStatusCode)
{
CaricaDati();
}
else
{
MessageBox.Show("Errore nella chiamata alla Web API: " + response.StatusCode);
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Siamo giunti all’ultimo esempio di codice, quello relativo alla modifica del dato, l’operazione di tipo update.
Facciamo doppio click sul pulsante “Update” in modo da passare in visualizzazione codice nell’evento click del pulsante stesso, in modo da scrivere le operazioni di aggiornamento.
In questo metodo si crea un oggetto della classe dati, con i dati modificati, utilizzeremo la chiamata di tipo post, passando l’id del record e l’oggetto trasformato in formato json.
C#
private void BtnWebAPIMetodoUpdate_Click(object sender, EventArgs e)
{
//Aggiorno il dato tramite la web api
try
{
if (DtgDati.SelectedRows.Count == 0)
{
MessageBox.Show("Selezionare una riga da aggiornare");
return;
}
var selectedRow = DtgDati.SelectedRows[0];
var idSelezionato = selectedRow.Cells[0].Value.ToString();
if (string.IsNullOrEmpty(idSelezionato))
{
MessageBox.Show("record non trovato");
return;
}
string id = idSelezionato;
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("http://localhost:5081/"); //Indirizzo della Web API
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
//Eseguo la chiamata al metodo put
var datoAggiornato = new Dati
{
nome = TxtNome.Text,
cognome = TxtCognome.Text,
email = $"{TxtNome.Text}{TxtCognome.Text}@dominio.it",
data_nascita = DateTime.Now
};
var json = JsonConvert.SerializeObject(datoAggiornato);
var content = new StringContent(json, System.Text.Encoding.UTF8, "application/json");
HttpResponseMessage response = client.PutAsync($"api/daticontrollers/{id}", content).Result;
if (response.IsSuccessStatusCode)
{
CaricaDati();
}
else
{
MessageBox.Show("Errore nella chiamata alla Web API: " + response.StatusCode);
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Ora non resta che testare il nostro progetto per le varie operazioni CRUD, ricordando di eseguire anche il servizio delle Web APi oltre al progetto di tipo Windows Application.
Conclusioni
Il tutorial ha fornito al lettore le informazioni e le basi per la gestione del database noSQL MondoDB Community.
In particolare, la gestione delle varie operazioni CRUD, su un database ed una collection, e richiamare il servizio di tipo WEB API creato con la tecnologia Asp.Net Core, servizi molto usati in questi ultimi anni.
La chiamata ai vari metodi del servizi sono stati invocati da un progetto di tipo “Windows Application”, ma possono essere utilizzati anche da altri tipi di progetto, come console Application, web application o mobile application.
Informazioni di base, per la creazione di applicazioni business per la gestione dei dati del database MongoDB Community.