Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Nota
Questa non è la versione più recente di questo articolo. Per la versione corrente, vedere la versione .NET 10 di questo articolo.
Avviso
Questa versione di ASP.NET Core non è più supportata. Per altre informazioni, vedere i criteri di supporto di .NET e .NET Core. Per la versione corrente, vedere la versione .NET 9 di questo articolo.
Il pattern architetturale Model-View-Controller (MVC) suddivide un'app in tre componenti principali: Modello, Vista e Controller. Il pattern MVC consente di creare app più semplici da aggiornare e sottoporre a test rispetto alle app monolitiche tradizionali.
Le app basate sul pattern MVC contengono:
-
Modelli: Classi che rappresentano i dati dell'app. Le classi modello usano la logica di convalida per applicare le regole business per tali dati. In genere, gli oggetti del modello recuperano e archiviano lo stato del modello in un database. In questa esercitazione, un modello
Movierecupera i dati dei film da un database, li fornisce alla vista o li aggiorna. I dati aggiornati vengono scritti in un database. - Viste: Le viste sono i componenti che visualizzano l'interfaccia utente (UI) dell'app. In genere questa interfaccia utente presenta i dati del modello.
-
Controllers: Sono classi che:
- Gestire le richieste del browser.
- Recuperare i dati del modello.
- Chiamare i modelli di visualizzazione che restituiscono una risposta.
In un'app MVC la visualizzazione visualizza solo le informazioni. Il controller gestisce e risponde all'input e all'interazione dell'utente. Ad esempio, il controller gestisce i segmenti url e i valori di stringa di query e passa questi valori al modello. Il modello può usare questi valori per eseguire query sul database. Ad esempio:
-
https://localhost:5001/Home/Privacy: specifica ilHomecontroller e l'azionePrivacy. -
https://localhost:5001/Movies/Edit/5: è una richiesta per modificare il film con ID=5 usando il controllerMoviese l'azioneEdit, che sono descritti più avanti nell'esercitazione.
I dati del percorso vengono spiegati in seguito nell'esercitazione.
Il modello di architettura MVC separa un'app in tre gruppi principali di componenti: Modelli, Visualizzazioni e Controller. Questo modello consente di ottenere la separazione dei problemi: la logica dell'interfaccia utente appartiene alla visualizzazione. La logica di input risiede nel controller. La logica di business risiede nel modello. Questa separazione consente di gestire la complessità durante la creazione di un'app, perché consente di lavorare su un aspetto dell'implementazione alla volta senza influire sul codice di un altro. Ad esempio, è possibile lavorare sul codice della vista senza dipendere dal codice della logica aziendale.
Questi concetti vengono introdotti e illustrati in questa serie di esercitazioni durante la creazione di un'app per film. Il progetto MVC contiene le cartelle per i controller e le viste.
Aggiungere un controller
In Esplora Soluzioni, fare clic con il pulsante destro del mouse su Controller > Aggiungi > Controller.
Nella finestra di dialogo Aggiungi nuovo elemento con scaffolding, selezionare Controller MVC - Vuoto>Aggiungi.
Nella finestra di dialogo Aggiungi nuovo elemento - MvcMovie immettere HelloWorldController.cs e selezionare Aggiungi.
Sostituire il contenuto di Controllers/HelloWorldController.cs con il codice seguente:
using Microsoft.AspNetCore.Mvc;
using System.Text.Encodings.Web;
namespace MvcMovie.Controllers;
public class HelloWorldController : Controller
{
//
// GET: /HelloWorld/
public string Index()
{
return "This is my default action...";
}
//
// GET: /HelloWorld/Welcome/
public string Welcome()
{
return "This is the Welcome action method...";
}
}
È possibile chiamare ogni metodo public in un controller come endpoint HTTP. Nell'esempio precedente entrambi i metodi restituiscono una stringa. Notare i commenti che precedono ogni metodo.
Un endpoint HTTP:
- Un URL indirizzabile nell'applicazione web, ad esempio
https://localhost:5001/HelloWorld. - Combina:
- Protocollo usato:
HTTPS. - Percorso di rete del server Web, inclusa la porta TCP:
localhost:5001. - URI di destinazione:
HelloWorld.
- Protocollo usato:
Il primo commento indica che si tratta di un metodo HTTP GET che viene richiamato aggiungendo /HelloWorld/ all'URL di base.
Il secondo commento specifica un metodo HTTP GET che viene richiamato aggiungendo /HelloWorld/Welcome/ all'URL. Più avanti nell'esercitazione viene usato il motore di scaffolding per generare HTTP POST metodi che servono ad aggiornare i dati.
Eseguire l'app senza il debugger premendo CTRL+F5.
Aggiungere /HelloWorld al percorso nella barra degli indirizzi. Il metodo Index restituisce una stringa.
MVC richiama le classi controller e i metodi di azione all'interno di essi, a seconda dell'URL in ingresso. La logica di routing url predefinita usata da MVC usa un formato simile al seguente per determinare il codice da richiamare:
/[Controller]/[ActionName]/[Parameters]
Il formato di routing viene impostato nel Program.cs file.
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
Quando si accede all'app e non si forniscono segmenti di URL, per impostazione predefinita viene utilizzato il controller "Home" e il metodo "Index" specificato nella riga evidenziata nel modello sopra. Nei segmenti di URL precedenti:
- Il primo segmento di URL determina la classe di controller da eseguire. Quindi
localhost:5001/HelloWorldsi mappa sulla classe HelloWorld Controller. - La seconda parte del segmento URL determina il metodo di azione per la classe. Fa quindi in modo
localhost:5001/HelloWorld/Indexche ilIndexmetodo dellaHelloWorldControllerclasse venga eseguito. Si noti che è necessario solo passare alocalhost:5001/HelloWorlde il metodoIndexviene chiamato per impostazione predefinita.Indexè il metodo predefinito che verrà chiamato in un controller se un nome di metodo non viene specificato in modo esplicito. - La terza parte del segmento di URL (
id) è relativa ai dati di route. I dati del percorso vengono spiegati in seguito nell'esercitazione.
Vai a: https://localhost:{PORT}/HelloWorld/Welcome. Sostituire {PORT} con il numero di porta.
Il metodo Welcome viene eseguito e restituisce la stringa This is the Welcome action method.... Per questo URL, il controller è HelloWorld e il metodo di azione è Welcome. Non è stata ancora usata la parte [Parameters] dell'URL.
Modificare il codice in modo da passare le informazioni dei parametri dall'URL al controller. Ad esempio: /HelloWorld/Welcome?name=Rick&numtimes=4.
Modificare il metodo Welcome in modo da includere due parametri, come illustrato nel codice seguente.
// GET: /HelloWorld/Welcome/
// Requires using System.Text.Encodings.Web;
public string Welcome(string name, int numTimes = 1)
{
return HtmlEncoder.Default.Encode($"Hello {name}, NumTimes is: {numTimes}");
}
Il codice precedente:
- Usa la funzionalità di parametro facoltativo in C# per indicare che il parametro
numTimesviene impostato come predefinito su 1, se non viene passato alcun valore. - Usa
HtmlEncoder.Default.Encodeper proteggere l'app da input dannoso, ad esempio tramite JavaScript. - Usa Stringhe Interpolati in
$"Hello {name}, NumTimes is: {numTimes}".
Avvia l'app e naviga verso: https://localhost:{PORT}/HelloWorld/Welcome?name=Rick&numtimes=4. Sostituire {PORT} con il numero di porta.
Provare valori diversi per name e numtimes nell'URL. Il sistema di associazione di modelli MVC esegue automaticamente il mapping dei parametri denominati dalla stringa di query ai parametri nel metodo . Per altre informazioni, vedere Associazione di modelli.
Nell'immagine precedente:
- Il segmento
ParametersURL non viene usato. -
nameenumTimesi parametri vengono passati nella stringa di query. - Il
?punto interrogativo nell'URL precedente è un separatore e la stringa di query segue. - Il
&carattere separa le coppie campo-valore.
Sostituire il metodo Welcome con il codice seguente:
public string Welcome(string name, int ID = 1)
{
return HtmlEncoder.Default.Encode($"Hello {name}, ID: {ID}");
}
Eseguire l'app e immettere l'URL seguente: https://localhost:{PORT}/HelloWorld/Welcome/3?name=Rick
Nell'URL precedente:
- Il terzo segmento URL corrisponde al parametro
iddi route . - Il metodo
Welcomecontiene un parametroidche corrisponde al modello di URL nel metodoMapControllerRoute. - La parte finale
?avvia la stringa di query.
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
Nell'esempio precedente:
- Il terzo segmento URL corrisponde al parametro
iddi route definito nel modello di routing nelProgram.csfile. - Il metodo
Welcomecontiene un parametroidche corrisponde al modello di URL nel metodoMapControllerRoute. - Il carattere finale
?(inid?) indica che il parametroidè facoltativo.
Il pattern architetturale Model-View-Controller (MVC) suddivide un'app in tre componenti principali: Modello, Vista e Controller. Il pattern MVC consente di creare app più semplici da aggiornare e sottoporre a test rispetto alle app monolitiche tradizionali.
Le app basate sul pattern MVC contengono:
-
Modelli: Classi che rappresentano i dati dell'app. Le classi modello usano la logica di convalida per applicare le regole business per tali dati. In genere, gli oggetti del modello recuperano e archiviano lo stato del modello in un database. In questa esercitazione, un modello
Movierecupera i dati dei film da un database, li fornisce alla vista o li aggiorna. I dati aggiornati vengono scritti in un database. - Viste: Le viste sono i componenti che visualizzano l'interfaccia utente (UI) dell'app. In genere questa interfaccia utente presenta i dati del modello.
-
Controllers: Sono classi che:
- Gestire le richieste del browser.
- Recuperare i dati del modello.
- Chiamare i modelli di visualizzazione che restituiscono una risposta.
In un'app MVC la visualizzazione visualizza solo le informazioni. Il controller gestisce e risponde all'input e all'interazione dell'utente. Ad esempio, il controller gestisce i segmenti url e i valori di stringa di query e passa questi valori al modello. Il modello può usare questi valori per eseguire query sul database. Ad esempio:
-
https://localhost:5001/Home/Privacy: specifica ilHomecontroller e l'azionePrivacy. -
https://localhost:5001/Movies/Edit/5: è una richiesta per modificare il film con ID=5 usando il controllerMoviese l'azioneEdit, che sono descritti più avanti nell'esercitazione.
I dati del percorso vengono spiegati in seguito nell'esercitazione.
Il modello di architettura MVC separa un'app in tre gruppi principali di componenti: Modelli, Visualizzazioni e Controller. Questo modello consente di ottenere la separazione dei problemi: la logica dell'interfaccia utente appartiene alla visualizzazione. La logica di input risiede nel controller. La logica di business risiede nel modello. Questa separazione consente di gestire la complessità durante la creazione di un'app, perché consente di lavorare su un aspetto dell'implementazione alla volta senza influire sul codice di un altro. Ad esempio, è possibile lavorare sul codice della vista senza dipendere dal codice della logica aziendale.
Questi concetti vengono introdotti e illustrati in questa serie di esercitazioni durante la creazione di un'app per film. Il progetto MVC contiene le cartelle per i controller e le viste.
Aggiungere un controller
In Esplora Soluzioni, fare clic con il pulsante destro del mouse su Controller > Aggiungi > Controller.
Nella finestra di dialogo Aggiungi nuovo elemento con scaffolding, selezionare Controller MVC - Vuoto>Aggiungi.
Nella finestra di dialogo Aggiungi nuovo elemento - MvcMovie immettere HelloWorldController.cs e selezionare Aggiungi.
Sostituire il contenuto di Controllers/HelloWorldController.cs con il codice seguente:
using Microsoft.AspNetCore.Mvc;
using System.Text.Encodings.Web;
namespace MvcMovie.Controllers;
public class HelloWorldController : Controller
{
//
// GET: /HelloWorld/
public string Index()
{
return "This is my default action...";
}
//
// GET: /HelloWorld/Welcome/
public string Welcome()
{
return "This is the Welcome action method...";
}
}
È possibile chiamare ogni metodo public in un controller come endpoint HTTP. Nell'esempio precedente entrambi i metodi restituiscono una stringa. Notare i commenti che precedono ogni metodo.
Un endpoint HTTP:
- Un URL indirizzabile nell'applicazione web, ad esempio
https://localhost:5001/HelloWorld. - Combina:
- Protocollo usato:
HTTPS. - Percorso di rete del server Web, inclusa la porta TCP:
localhost:5001. - URI di destinazione:
HelloWorld.
- Protocollo usato:
Il primo commento indica che si tratta di un metodo HTTP GET che viene richiamato aggiungendo /HelloWorld/ all'URL di base.
Il secondo commento specifica un metodo HTTP GET che viene richiamato aggiungendo /HelloWorld/Welcome/ all'URL. Più avanti nell'esercitazione viene usato il motore di scaffolding per generare HTTP POST metodi che servono ad aggiornare i dati.
Eseguire l'app senza il debugger premendo CTRL+F5.
Aggiungere /HelloWorld al percorso nella barra degli indirizzi. Il metodo Index restituisce una stringa.
MVC richiama le classi controller e i metodi di azione all'interno di essi, a seconda dell'URL in ingresso. La logica di routing url predefinita usata da MVC usa un formato simile al seguente per determinare il codice da richiamare:
/[Controller]/[ActionName]/[Parameters]
Il formato di routing viene impostato nel Program.cs file.
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
Quando si accede all'app e non si forniscono segmenti di URL, per impostazione predefinita viene utilizzato il controller "Home" e il metodo "Index" specificato nella riga evidenziata nel modello sopra. Nei segmenti di URL precedenti:
- Il primo segmento di URL determina la classe di controller da eseguire. Quindi
localhost:5001/HelloWorldsi mappa sulla classe HelloWorld Controller. - La seconda parte del segmento URL determina il metodo di azione per la classe. Fa quindi in modo
localhost:5001/HelloWorld/Indexche ilIndexmetodo dellaHelloWorldControllerclasse venga eseguito. Si noti che è necessario solo passare alocalhost:5001/HelloWorlde il metodoIndexviene chiamato per impostazione predefinita.Indexè il metodo predefinito che verrà chiamato in un controller se un nome di metodo non viene specificato in modo esplicito. - La terza parte del segmento di URL (
id) è relativa ai dati di route. I dati del percorso vengono spiegati in seguito nell'esercitazione.
Vai a: https://localhost:{PORT}/HelloWorld/Welcome. Sostituire {PORT} con il numero di porta.
Il metodo Welcome viene eseguito e restituisce la stringa This is the Welcome action method.... Per questo URL, il controller è HelloWorld e il metodo di azione è Welcome. Non è stata ancora usata la parte [Parameters] dell'URL.
Modificare il codice in modo da passare le informazioni dei parametri dall'URL al controller. Ad esempio: /HelloWorld/Welcome?name=Rick&numtimes=4.
Modificare il metodo Welcome in modo da includere due parametri, come illustrato nel codice seguente.
// GET: /HelloWorld/Welcome/
// Requires using System.Text.Encodings.Web;
public string Welcome(string name, int numTimes = 1)
{
return HtmlEncoder.Default.Encode($"Hello {name}, NumTimes is: {numTimes}");
}
Il codice precedente:
- Usa la funzionalità di parametro facoltativo in C# per indicare che il parametro
numTimesviene impostato come predefinito su 1, se non viene passato alcun valore. - Usa
HtmlEncoder.Default.Encodeper proteggere l'app da input dannoso, ad esempio tramite JavaScript. - Usa Stringhe Interpolati in
$"Hello {name}, NumTimes is: {numTimes}".
Avvia l'app e naviga verso: https://localhost:{PORT}/HelloWorld/Welcome?name=Rick&numtimes=4. Sostituire {PORT} con il numero di porta.
Provare valori diversi per name e numtimes nell'URL. Il sistema di associazione di modelli MVC esegue automaticamente il mapping dei parametri denominati dalla stringa di query ai parametri nel metodo . Per altre informazioni, vedere Associazione di modelli.
Nell'immagine precedente:
- Il segmento
ParametersURL non viene usato. -
nameenumTimesi parametri vengono passati nella stringa di query. - Il
?punto interrogativo nell'URL precedente è un separatore e la stringa di query segue. - Il
&carattere separa le coppie campo-valore.
Sostituire il metodo Welcome con il codice seguente:
public string Welcome(string name, int ID = 1)
{
return HtmlEncoder.Default.Encode($"Hello {name}, ID: {ID}");
}
Eseguire l'app e immettere l'URL seguente: https://localhost:{PORT}/HelloWorld/Welcome/3?name=Rick
Nell'URL precedente:
- Il terzo segmento URL corrisponde al parametro
iddi route . - Il metodo
Welcomecontiene un parametroidche corrisponde al modello di URL nel metodoMapControllerRoute. - La parte finale
?avvia la stringa di query.
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
Nell'esempio precedente:
- Il terzo segmento URL corrisponde al parametro
iddi route . - Il metodo
Welcomecontiene un parametroidche corrisponde al modello di URL nel metodoMapControllerRoute. - Il carattere finale
?(inid?) indica che il parametroidè facoltativo.
Il pattern architetturale Model-View-Controller (MVC) suddivide un'app in tre componenti principali: Modello, Vista e Controller. Il pattern MVC consente di creare app più semplici da aggiornare e sottoporre a test rispetto alle app monolitiche tradizionali.
Le app basate sul pattern MVC contengono:
-
Modelli: Classi che rappresentano i dati dell'app. Le classi modello usano la logica di convalida per applicare le regole business per tali dati. In genere, gli oggetti del modello recuperano e archiviano lo stato del modello in un database. In questa esercitazione, un modello
Movierecupera i dati dei film da un database, li fornisce alla vista o li aggiorna. I dati aggiornati vengono scritti in un database. - Viste: Le viste sono i componenti che visualizzano l'interfaccia utente (UI) dell'app. In genere questa interfaccia utente presenta i dati del modello.
-
Controllers: Sono classi che:
- Gestire le richieste del browser.
- Recuperare i dati del modello.
- Chiamare i modelli di visualizzazione che restituiscono una risposta.
In un'app MVC la visualizzazione visualizza solo le informazioni. Il controller gestisce e risponde all'input e all'interazione dell'utente. Ad esempio, il controller gestisce i segmenti url e i valori di stringa di query e passa questi valori al modello. Il modello può usare questi valori per eseguire query sul database. Ad esempio:
-
https://localhost:5001/Home/Privacy: specifica ilHomecontroller e l'azionePrivacy. -
https://localhost:5001/Movies/Edit/5: è una richiesta per modificare il film con ID=5 usando il controllerMoviese l'azioneEdit, che sono descritti più avanti nell'esercitazione.
I dati del percorso vengono spiegati in seguito nell'esercitazione.
Il modello di architettura MVC separa un'app in tre gruppi principali di componenti: Modelli, Visualizzazioni e Controller. Questo modello consente di ottenere la separazione dei problemi: la logica dell'interfaccia utente appartiene alla visualizzazione. La logica di input risiede nel controller. La logica di business risiede nel modello. Questa separazione consente di gestire la complessità durante la creazione di un'app, perché consente di lavorare su un aspetto dell'implementazione alla volta senza influire sul codice di un altro. Ad esempio, è possibile lavorare sul codice della vista senza dipendere dal codice della logica aziendale.
Questi concetti vengono introdotti e illustrati in questa serie di esercitazioni durante la creazione di un'app per film. Il progetto MVC contiene le cartelle per i controller e le viste.
Aggiungere un controller
In Esplora Soluzioni, fare clic con il pulsante destro del mouse su Controller > Aggiungi > Controller.
Nella finestra di dialogo Aggiungi nuovo elemento con scaffolding, selezionare Controller MVC - Vuoto>Aggiungi.
Nella finestra di dialogo Aggiungi nuovo elemento - MvcMovie immettere HelloWorldController.cs e selezionare Aggiungi.
Sostituire il contenuto di Controllers/HelloWorldController.cs con il codice seguente:
using Microsoft.AspNetCore.Mvc;
using System.Text.Encodings.Web;
namespace MvcMovie.Controllers;
public class HelloWorldController : Controller
{
//
// GET: /HelloWorld/
public string Index()
{
return "This is my default action...";
}
//
// GET: /HelloWorld/Welcome/
public string Welcome()
{
return "This is the Welcome action method...";
}
}
È possibile chiamare ogni metodo public in un controller come endpoint HTTP. Nell'esempio precedente entrambi i metodi restituiscono una stringa. Notare i commenti che precedono ogni metodo.
Un endpoint HTTP:
- Un URL indirizzabile nell'applicazione web, ad esempio
https://localhost:5001/HelloWorld. - Combina:
- Protocollo usato:
HTTPS. - Percorso di rete del server Web, inclusa la porta TCP:
localhost:5001. - URI di destinazione:
HelloWorld.
- Protocollo usato:
Il primo commento indica che si tratta di un metodo HTTP GET che viene richiamato aggiungendo /HelloWorld/ all'URL di base.
Il secondo commento specifica un metodo HTTP GET che viene richiamato aggiungendo /HelloWorld/Welcome/ all'URL. Più avanti nell'esercitazione viene usato il motore di scaffolding per generare HTTP POST metodi che servono ad aggiornare i dati.
Eseguire l'app senza il debugger premendo CTRL+F5.
Aggiungere /HelloWorld al percorso nella barra degli indirizzi. Il metodo Index restituisce una stringa.
MVC richiama le classi controller e i metodi di azione all'interno di essi, a seconda dell'URL in ingresso. La logica di routing url predefinita usata da MVC usa un formato simile al seguente per determinare il codice da richiamare:
/[Controller]/[ActionName]/[Parameters]
Il formato di routing viene impostato nel Program.cs file.
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
Quando si accede all'app e non si forniscono segmenti di URL, per impostazione predefinita viene utilizzato il controller "Home" e il metodo "Index" specificato nella riga evidenziata nel modello sopra. Nei segmenti di URL precedenti:
- Il primo segmento di URL determina la classe di controller da eseguire. Quindi
localhost:5001/HelloWorldsi mappa sulla classe HelloWorld Controller. - La seconda parte del segmento URL determina il metodo di azione per la classe. Fa quindi in modo
localhost:5001/HelloWorld/Indexche ilIndexmetodo dellaHelloWorldControllerclasse venga eseguito. Si noti che è necessario solo passare alocalhost:5001/HelloWorlde il metodoIndexviene chiamato per impostazione predefinita.Indexè il metodo predefinito che verrà chiamato in un controller se un nome di metodo non viene specificato in modo esplicito. - La terza parte del segmento di URL (
id) è relativa ai dati di route. I dati del percorso vengono spiegati in seguito nell'esercitazione.
Vai a: https://localhost:{PORT}/HelloWorld/Welcome. Sostituire {PORT} con il numero di porta.
Il metodo Welcome viene eseguito e restituisce la stringa This is the Welcome action method.... Per questo URL, il controller è HelloWorld e il metodo di azione è Welcome. Non è stata ancora usata la parte [Parameters] dell'URL.
Modificare il codice in modo da passare le informazioni dei parametri dall'URL al controller. Ad esempio: /HelloWorld/Welcome?name=Rick&numtimes=4.
Modificare il metodo Welcome in modo da includere due parametri, come illustrato nel codice seguente.
// GET: /HelloWorld/Welcome/
// Requires using System.Text.Encodings.Web;
public string Welcome(string name, int numTimes = 1)
{
return HtmlEncoder.Default.Encode($"Hello {name}, NumTimes is: {numTimes}");
}
Il codice precedente:
- Usa la funzionalità di parametro facoltativo in C# per indicare che il parametro
numTimesviene impostato come predefinito su 1, se non viene passato alcun valore. - Usa
HtmlEncoder.Default.Encodeper proteggere l'app da input dannoso, ad esempio tramite JavaScript. - Usa Stringhe Interpolati in
$"Hello {name}, NumTimes is: {numTimes}".
Avvia l'app e naviga verso: https://localhost:{PORT}/HelloWorld/Welcome?name=Rick&numtimes=4. Sostituire {PORT} con il numero di porta.
Provare valori diversi per name e numtimes nell'URL. Il sistema di associazione di modelli MVC esegue automaticamente il mapping dei parametri denominati dalla stringa di query ai parametri nel metodo . Per altre informazioni, vedere Associazione di modelli.
Nell'immagine precedente:
- Il segmento
ParametersURL non viene usato. -
nameenumTimesi parametri vengono passati nella stringa di query. - Il
?punto interrogativo nell'URL precedente è un separatore e la stringa di query segue. - Il
&carattere separa le coppie campo-valore.
Sostituire il metodo Welcome con il codice seguente:
public string Welcome(string name, int ID = 1)
{
return HtmlEncoder.Default.Encode($"Hello {name}, ID: {ID}");
}
Eseguire l'app e immettere l'URL seguente: https://localhost:{PORT}/HelloWorld/Welcome/3?name=Rick
Nell'URL precedente:
- Il terzo segmento URL corrisponde al parametro
iddi route . - Il metodo
Welcomecontiene un parametroidche corrisponde al modello di URL nel metodoMapControllerRoute. - La parte finale
?avvia la stringa di query.
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
Nell'esempio precedente:
- Il terzo segmento URL corrisponde al parametro
iddi route . - Il metodo
Welcomecontiene un parametroidche corrisponde al modello di URL nel metodoMapControllerRoute. - Il carattere finale
?(inid?) indica che il parametroidè facoltativo.
Il pattern architetturale Model-View-Controller (MVC) suddivide un'app in tre componenti principali: Modello, Vista e Controller. Il pattern MVC consente di creare app più semplici da aggiornare e sottoporre a test rispetto alle app monolitiche tradizionali.
Le app basate sul pattern MVC contengono:
-
Modelli: Classi che rappresentano i dati dell'app. Le classi modello usano la logica di convalida per applicare le regole business per tali dati. In genere, gli oggetti del modello recuperano e archiviano lo stato del modello in un database. In questa esercitazione, un modello
Movierecupera i dati dei film da un database, li fornisce alla vista o li aggiorna. I dati aggiornati vengono scritti in un database. - Viste: Le viste sono i componenti che visualizzano l'interfaccia utente (UI) dell'app. In genere questa interfaccia utente presenta i dati del modello.
-
Controllers: Sono classi che:
- Gestire le richieste del browser.
- Recuperare i dati del modello.
- Chiamare i modelli di visualizzazione che restituiscono una risposta.
In un'app MVC la visualizzazione visualizza solo le informazioni. Il controller gestisce e risponde all'input e all'interazione dell'utente. Ad esempio, il controller gestisce i segmenti url e i valori di stringa di query e passa questi valori al modello. Il modello può usare questi valori per eseguire query sul database. Ad esempio:
-
https://localhost:5001/Home/Privacy: specifica ilHomecontroller e l'azionePrivacy. -
https://localhost:5001/Movies/Edit/5: è una richiesta per modificare il film con ID=5 usando il controllerMoviese l'azioneEdit, che sono descritti più avanti nell'esercitazione.
I dati del percorso vengono spiegati in seguito nell'esercitazione.
Il modello di architettura MVC separa un'app in tre gruppi principali di componenti: Modelli, Visualizzazioni e Controller. Questo modello consente di ottenere la separazione dei problemi: la logica dell'interfaccia utente appartiene alla visualizzazione. La logica di input risiede nel controller. La logica di business risiede nel modello. Questa separazione consente di gestire la complessità durante la creazione di un'app, perché consente di lavorare su un aspetto dell'implementazione alla volta senza influire sul codice di un altro. Ad esempio, è possibile lavorare sul codice della vista senza dipendere dal codice della logica aziendale.
Questi concetti vengono introdotti e illustrati in questa serie di esercitazioni durante la creazione di un'app per film. Il progetto MVC contiene le cartelle per i controller e le viste.
Aggiungere un controller
In Esplora Soluzioni, fare clic con il pulsante destro del mouse su Controller > Aggiungi > Controller.
Nella finestra di dialogo Aggiungi nuovo elemento con scaffolding, selezionare Controller MVC - Vuoto>Aggiungi.
Nella finestra di dialogo Aggiungi nuovo elemento - MvcMovie immettere HelloWorldController.cs e selezionare Aggiungi.
Sostituire il contenuto di Controllers/HelloWorldController.cs con il codice seguente:
using Microsoft.AspNetCore.Mvc;
using System.Text.Encodings.Web;
namespace MvcMovie.Controllers
{
public class HelloWorldController : Controller
{
//
// GET: /HelloWorld/
public string Index()
{
return "This is my default action...";
}
//
// GET: /HelloWorld/Welcome/
public string Welcome()
{
return "This is the Welcome action method...";
}
}
}
È possibile chiamare ogni metodo public in un controller come endpoint HTTP. Nell'esempio precedente entrambi i metodi restituiscono una stringa. Notare i commenti che precedono ogni metodo.
Un endpoint HTTP:
- Un URL indirizzabile nell'applicazione web, ad esempio
https://localhost:5001/HelloWorld. - Combina:
- Protocollo usato:
HTTPS. - Percorso di rete del server Web, inclusa la porta TCP:
localhost:5001. - URI di destinazione:
HelloWorld.
- Protocollo usato:
Il primo commento indica che si tratta di un metodo HTTP GET che viene richiamato aggiungendo /HelloWorld/ all'URL di base.
Il secondo commento specifica un metodo HTTP GET che viene richiamato aggiungendo /HelloWorld/Welcome/ all'URL. Più avanti nell'esercitazione viene usato il motore di scaffolding per generare HTTP POST metodi che servono ad aggiornare i dati.
Eseguire l'app senza il debugger.
Aggiungere "HelloWorld" al percorso nella barra degli indirizzi. Il metodo Index restituisce una stringa.
MVC richiama le classi controller e i metodi di azione all'interno di essi, a seconda dell'URL in ingresso. La logica di routing url predefinita usata da MVC usa un formato simile al seguente per determinare il codice da richiamare:
/[Controller]/[ActionName]/[Parameters]
Il formato di routing viene impostato nel Program.cs file.
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
Quando si accede all'app e non si forniscono segmenti di URL, per impostazione predefinita viene utilizzato il controller "Home" e il metodo "Index" specificato nella riga evidenziata nel modello sopra. Nei segmenti di URL precedenti:
- Il primo segmento di URL determina la classe di controller da eseguire. Quindi
localhost:5001/HelloWorldsi mappa sulla classe HelloWorld Controller. - La seconda parte del segmento URL determina il metodo di azione per la classe. Fa quindi in modo
localhost:5001/HelloWorld/Indexche ilIndexmetodo dellaHelloWorldControllerclasse venga eseguito. Si noti che è necessario solo passare alocalhost:5001/HelloWorlde il metodoIndexviene chiamato per impostazione predefinita.Indexè il metodo predefinito che verrà chiamato in un controller se un nome di metodo non viene specificato in modo esplicito. - La terza parte del segmento di URL (
id) è relativa ai dati di route. I dati del percorso vengono spiegati in seguito nell'esercitazione.
Vai a: https://localhost:{PORT}/HelloWorld/Welcome. Sostituire {PORT} con il numero di porta.
Il metodo Welcome viene eseguito e restituisce la stringa This is the Welcome action method.... Per questo URL, il controller è HelloWorld e il metodo di azione è Welcome. Non è stata ancora usata la parte [Parameters] dell'URL.
Modificare il codice in modo da passare le informazioni dei parametri dall'URL al controller. Ad esempio: /HelloWorld/Welcome?name=Rick&numtimes=4.
Modificare il metodo Welcome in modo da includere due parametri, come illustrato nel codice seguente.
// GET: /HelloWorld/Welcome/
// Requires using System.Text.Encodings.Web;
public string Welcome(string name, int numTimes = 1)
{
return HtmlEncoder.Default.Encode($"Hello {name}, NumTimes is: {numTimes}");
}
Il codice precedente:
- Usa la funzionalità di parametro facoltativo in C# per indicare che il parametro
numTimesviene impostato come predefinito su 1, se non viene passato alcun valore. - Usa
HtmlEncoder.Default.Encodeper proteggere l'app da input dannoso, ad esempio tramite JavaScript. - Usa Stringhe Interpolati in
$"Hello {name}, NumTimes is: {numTimes}".
Avvia l'app e naviga verso: https://localhost:{PORT}/HelloWorld/Welcome?name=Rick&numtimes=4. Sostituire {PORT} con il numero di porta.
Provare valori diversi per name e numtimes nell'URL. Il sistema di associazione di modelli MVC esegue automaticamente il mapping dei parametri denominati dalla stringa di query ai parametri nel metodo . Per altre informazioni, vedere Associazione di modelli.
Nell'immagine precedente:
- Il segmento
ParametersURL non viene usato. -
nameenumTimesi parametri vengono passati nella stringa di query. - Il
?punto interrogativo nell'URL precedente è un separatore e la stringa di query segue. - Il
&carattere separa le coppie campo-valore.
Sostituire il metodo Welcome con il codice seguente:
public string Welcome(string name, int ID = 1)
{
return HtmlEncoder.Default.Encode($"Hello {name}, ID: {ID}");
}
Eseguire l'app e immettere l'URL seguente: https://localhost:{PORT}/HelloWorld/Welcome/3?name=Rick
Nell'URL precedente:
- Il terzo segmento URL corrisponde al parametro
iddi route . - Il metodo
Welcomecontiene un parametroidche corrisponde al modello di URL nel metodoMapControllerRoute. - La parte finale
?avvia la stringa di query.
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
Nell'esempio precedente:
- Il terzo segmento URL corrisponde al parametro
iddi route . - Il metodo
Welcomecontiene un parametroidche corrisponde al modello di URL nel metodoMapControllerRoute. - Il carattere finale
?(inid?) indica che il parametroidè facoltativo.
Il pattern architetturale Model-View-Controller (MVC) suddivide un'app in tre componenti principali: Modello, Vista e Controller. Il pattern MVC consente di creare app più semplici da aggiornare e sottoporre a test rispetto alle app monolitiche tradizionali.
Le app basate sul pattern MVC contengono:
-
Modelli: Classi che rappresentano i dati dell'app. Le classi modello usano la logica di convalida per applicare le regole business per tali dati. In genere, gli oggetti del modello recuperano e archiviano lo stato del modello in un database. In questa esercitazione, un modello
Movierecupera i dati dei film da un database, li fornisce alla vista o li aggiorna. I dati aggiornati vengono scritti in un database. - Viste: Le viste sono i componenti che visualizzano l'interfaccia utente (UI) dell'app. In genere questa interfaccia utente presenta i dati del modello.
-
Controllers: Sono classi che:
- Gestire le richieste del browser.
- Recuperare i dati del modello.
- Chiamare i modelli di visualizzazione che restituiscono una risposta.
In un'app MVC la visualizzazione visualizza solo le informazioni. Il controller gestisce e risponde all'input e all'interazione dell'utente. Ad esempio, il controller gestisce i segmenti url e i valori di stringa di query e passa questi valori al modello. Il modello può usare questi valori per eseguire query sul database. Ad esempio:
-
https://localhost:5001/Home/Privacy: specifica ilHomecontroller e l'azionePrivacy. -
https://localhost:5001/Movies/Edit/5: è una richiesta per modificare il film con ID=5 usando il controllerMoviese l'azioneEdit, che sono descritti più avanti nell'esercitazione.
I dati del percorso vengono spiegati in seguito nell'esercitazione.
Il modello di architettura MVC separa un'app in tre gruppi principali di componenti: Modelli, Visualizzazioni e Controller. Questo modello consente di ottenere la separazione dei problemi: la logica dell'interfaccia utente appartiene alla visualizzazione. La logica di input risiede nel controller. La logica di business risiede nel modello. Questa separazione consente di gestire la complessità durante la creazione di un'app, perché consente di lavorare su un aspetto dell'implementazione alla volta senza influire sul codice di un altro. Ad esempio, è possibile lavorare sul codice della vista senza dipendere dal codice della logica aziendale.
Questi concetti vengono introdotti e illustrati in questa serie di esercitazioni durante la creazione di un'app per film. Il progetto MVC contiene le cartelle per i controller e le viste.
Aggiungere un controller
Nel Esplora soluzioni, fare clic con il pulsante destro del mouse su Controllers > Aggiungi > Controller.
Nella finestra di dialogo Aggiungi impalcatura selezionare Controller MVC - Vuoto.
Nella finestra di dialogo Aggiungi nuovo elemento - MvcMovie immettere HelloWorldController.cs e selezionare Aggiungi.
Sostituire il contenuto di Controllers/HelloWorldController.cs con quanto segue:
using Microsoft.AspNetCore.Mvc;
using System.Text.Encodings.Web;
namespace MvcMovie.Controllers
{
public class HelloWorldController : Controller
{
//
// GET: /HelloWorld/
public string Index()
{
return "This is my default action...";
}
//
// GET: /HelloWorld/Welcome/
public string Welcome()
{
return "This is the Welcome action method...";
}
}
}
È possibile chiamare ogni metodo public in un controller come endpoint HTTP. Nell'esempio precedente entrambi i metodi restituiscono una stringa. Notare i commenti che precedono ogni metodo.
Un endpoint HTTP:
- Un URL indirizzabile nell'applicazione web, ad esempio
https://localhost:5001/HelloWorld. - Combina:
- Protocollo usato:
HTTPS. - Percorso di rete del server Web, inclusa la porta TCP:
localhost:5001. - URI di destinazione:
HelloWorld.
- Protocollo usato:
Il primo commento indica che si tratta di un metodo HTTP GET che viene richiamato aggiungendo /HelloWorld/ all'URL di base.
Il secondo commento specifica un metodo HTTP GET che viene richiamato aggiungendo /HelloWorld/Welcome/ all'URL. Più avanti nell'esercitazione viene usato il motore di scaffolding per generare HTTP POST metodi che servono ad aggiornare i dati.
Eseguire l'app senza il debugger.
Aggiungere "HelloWorld" al percorso nella barra degli indirizzi. Il metodo Index restituisce una stringa.
MVC richiama le classi controller e i metodi di azione all'interno di essi, a seconda dell'URL in ingresso. La logica di routing url predefinita usata da MVC usa un formato simile al seguente per determinare il codice da richiamare:
/[Controller]/[ActionName]/[Parameters]
Il formato di routing viene impostato nel Configure metodo nel Startup.cs file.
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
Quando si accede all'app e non si forniscono segmenti di URL, per impostazione predefinita viene utilizzato il controller "Home" e il metodo "Index" specificato nella riga evidenziata nel modello sopra. Nei segmenti di URL precedenti:
- Il primo segmento di URL determina la classe di controller da eseguire.
localhost:5001/HelloWorldesegue quindi il mapping alla classe di controller HelloWorld. - La seconda parte del segmento URL determina il metodo di azione per la classe. Fa quindi in modo
localhost:5001/HelloWorld/Indexche ilIndexmetodo dellaHelloWorldControllerclasse venga eseguito. Si noti che è necessario solo passare alocalhost:5001/HelloWorlde il metodoIndexviene chiamato per impostazione predefinita.Indexè il metodo predefinito che verrà chiamato in un controller se un nome di metodo non viene specificato in modo esplicito. - La terza parte del segmento di URL (
id) è relativa ai dati di route. I dati del percorso vengono spiegati in seguito nell'esercitazione.
Vai a: https://localhost:{PORT}/HelloWorld/Welcome. Sostituire {PORT} con il numero di porta.
Il metodo Welcome viene eseguito e restituisce la stringa This is the Welcome action method.... Per questo URL, il controller è HelloWorld e il metodo di azione è Welcome. Non è stata ancora usata la parte [Parameters] dell'URL.
Modificare il codice in modo da passare le informazioni dei parametri dall'URL al controller. Ad esempio: /HelloWorld/Welcome?name=Rick&numtimes=4.
Modificare il metodo Welcome in modo da includere due parametri, come illustrato nel codice seguente.
// GET: /HelloWorld/Welcome/
// Requires using System.Text.Encodings.Web;
public string Welcome(string name, int numTimes = 1)
{
return HtmlEncoder.Default.Encode($"Hello {name}, NumTimes is: {numTimes}");
}
Il codice precedente:
- Usa la funzionalità di parametro facoltativo in C# per indicare che il parametro
numTimesviene impostato come predefinito su 1, se non viene passato alcun valore. - Usa
HtmlEncoder.Default.Encodeper proteggere l'app da input dannoso, ad esempio tramite JavaScript. - Usa Stringhe Interpolati in
$"Hello {name}, NumTimes is: {numTimes}".
Avvia l'app e naviga verso: https://localhost:{PORT}/HelloWorld/Welcome?name=Rick&numtimes=4. Sostituire {PORT} con il numero di porta.
Provare valori diversi per name e numtimes nell'URL. Il sistema di associazione di modelli MVC esegue automaticamente il mapping dei parametri denominati dalla stringa di query ai parametri nel metodo . Per altre informazioni, vedere Associazione di modelli.
Nell'immagine precedente:
- Il segmento
ParametersURL non viene usato. -
nameenumTimesi parametri vengono passati nella stringa di query. - Il
?punto interrogativo nell'URL precedente è un separatore e la stringa di query segue. - Il
&carattere separa le coppie campo-valore.
Sostituire il metodo Welcome con il codice seguente:
public string Welcome(string name, int ID = 1)
{
return HtmlEncoder.Default.Encode($"Hello {name}, ID: {ID}");
}
Eseguire l'app e immettere l'URL seguente: https://localhost:{PORT}/HelloWorld/Welcome/3?name=Rick
Nell'URL precedente:
- Il terzo segmento URL corrisponde al parametro
iddi route . - Il metodo
Welcomecontiene un parametroidche corrisponde al modello di URL nel metodoMapControllerRoute. - La parte finale
?avvia la stringa di query.
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
Nell'esempio precedente:
- Il terzo segmento URL corrisponde al parametro
iddi route . - Il metodo
Welcomecontiene un parametroidche corrisponde al modello di URL nel metodoMapControllerRoute. - Il carattere finale
?(inid?) indica che il parametroidè facoltativo.