Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Notitie
Dit is niet de nieuwste versie van dit artikel. Zie de .NET 10-versie van dit artikel voor de huidige release.
Waarschuwing
Deze versie van ASP.NET Core wordt niet meer ondersteund. Zie de .NET- en .NET Core-ondersteuningsbeleidvoor meer informatie. Zie de .NET 9-versie van dit artikelvoor de huidige release.
Door Rick Anderson
Het Model-View-Controller (MVC) architectuurpatroon scheidt een app in drie hoofdcomponenten: Model, View, en Controller. Met het MVC-patroon kunt u apps maken die testbaar en gemakkelijker kunnen worden bijgewerkt dan traditionele monolithische apps.
Op MVC gebaseerde apps bevatten:
-
Models: klassen die de gegevens van de app vertegenwoordigen. De modelklassen gebruiken validatielogica om bedrijfsregels voor die gegevens af te dwingen. Modelobjecten halen de modelstatus meestal op en slaan deze op in een database. In deze zelfstudie haalt het
Moviemodel filmgegevens op uit een database, geeft ze door aan de weergave of werkt ze bij. Bijgewerkte gegevens worden naar een database geschreven. - V: Weergaven zijn de onderdelen die de gebruikersinterface (UI) van de app weergeven. Over het algemeen worden in deze gebruikersinterface de modelgegevens weergegeven.
-
Controllers: Klassen die:
- Browseraanvragen verwerken.
- Modelgegevens ophalen.
- Weergavesjablonen aanroepen die een antwoord retourneren.
In een MVC-app wordt in de weergave alleen informatie weergegeven. De controller verwerkt en reageert op gebruikersinvoer en -interactie. De controller verwerkt bijvoorbeeld URL-segmenten en queryreekswaarden en geeft deze waarden door aan het model. Het model kan deze waarden gebruiken om een query uit te voeren op de database. Bijvoorbeeld:
-
https://localhost:5001/Home/Privacy: hiermee geeft u deHomecontroller en de actiePrivacyop. -
https://localhost:5001/Movies/Edit/5: is een aanvraag om de film met ID=5 te bewerken met behulp van deMoviescontroller en deEdit-actie, die verderop in de zelfstudie worden beschreven.
Routegegevens worden verderop in de handleiding uitgelegd.
Het architectuurpatroon van MVC scheidt een app in drie hoofdgroepen onderdelen: Modellen, Weergaven en Controllers. Dit patroon helpt bij het bereiken van scheiding van problemen: de UI-logica hoort in de weergave. Invoerlogica hoort bij de controller. Bedrijfslogica hoort bij het model. Deze scheiding helpt bij het beheren van complexiteit bij het bouwen van een app, omdat hiermee tegelijkertijd wordt gewerkt aan één aspect van de implementatie zonder dat dit van invloed is op de code van een andere. U kunt bijvoorbeeld aan de weergavecode werken zonder dat u afhankelijk bent van de bedrijfslogicacode.
Deze concepten worden geïntroduceerd en gedemonstreerd in deze reeks zelfstudies tijdens het bouwen van een film-app. Het MVC-project bevat mappen voor de Controllers en weergaven.
Een controller toevoegen
Klik in Solution Explorermet de rechtermuisknop op Controllers >> Controller toevoegen.
>
Selecteer in het dialoogvenster Nieuw gestructureerd item toevoegen de optie Lege MVC-controller>en klik op Toevoegen.
Voer in het dialoogvenster Add New Item - MvcMovieHelloWorldController.cs in en selecteer Add.
Vervang de inhoud van Controllers/HelloWorldController.cs door de volgende code:
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...";
}
}
Elke public methode in een controller kan worden aangeroepen als een HTTP-eindpunt. In het bovenstaande voorbeeld retourneren beide methoden een tekenreeks. Noteer de opmerkingen voorafgaand aan elke methode.
Een HTTP-eindpunt:
- Is een doel-URL in de webtoepassing, zoals
https://localhost:5001/HelloWorld. - Combineert:
- Het gebruikte protocol:
HTTPS. - De netwerklocatie van de webserver, inclusief de TCP-poort:
localhost:5001. - De doel-URI:
HelloWorld.
- Het gebruikte protocol:
De eerste opmerking geeft aan dat dit een HTTP GET- methode is die wordt aangeroepen door /HelloWorld/ toe te voegen aan de basis-URL.
De tweede opmerking geeft een HTTP GET- methode op die wordt aangeroepen door /HelloWorld/Welcome/ toe te voegen aan de URL. Later in de tutorial wordt de scaffolding-engine gebruikt om HTTP POST methoden te genereren, waarmee gegevens worden bijgewerkt.
Voer de app uit zonder het foutopsporingsprogramma door op Ctrl+F5-te drukken.
Voeg /HelloWorld toe aan het pad in de adresbalk. De methode Index retourneert een tekenreeks.
MVC roept controllerklassen aan en de actiemethoden hierin, afhankelijk van de binnenkomende URL. De standaard-URL-routeringslogica die door MVC wordt gebruikt, gebruikt een indeling zoals deze om te bepalen welke code moet worden aangeroepen:
/[Controller]/[ActionName]/[Parameters]
De routeringsindeling wordt ingesteld in het Program.cs-bestand.
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
Wanneer u naar de app bladert en geen URL-segmenten opgeeft, wordt deze standaard ingesteld op de controller 'Home' en de methode 'Index' die is opgegeven in de sjabloonregel die hierboven is gemarkeerd. In de voorgaande URL-segmenten:
- Het eerste URL-segment bepaalt de controllerklasse die moet worden uitgevoerd. Daarom wordt
localhost:5001/HelloWorldtoegewezen aan de klasse HelloWorld Controller. - Het tweede deel van het URL-segment bepaalt de actiemethode voor de klasse.
localhost:5001/HelloWorld/Indexzorgt er dus voor dat deIndexmethode van deHelloWorldController-klasse wordt uitgevoerd. U hoeft alleen naarlocalhost:5001/HelloWorldte bladeren en deIndexmethode is standaard aangeroepen.Indexis de standaardmethode die op een controller wordt aangeroepen als er niet expliciet een methodenaam is opgegeven. - Het derde deel van het URL-segment (
id) is voor routegegevens. Routegegevens worden verderop in de handleiding uitgelegd.
Blader naar: https://localhost:{PORT}/HelloWorld/Welcome. Vervang {PORT} door uw poortnummer.
De methode Welcome wordt uitgevoerd en retourneert de tekenreeks This is the Welcome action method.... Voor deze URL is de controller HelloWorld en de actiemethode is Welcome. U hebt het [Parameters] deel van de URL nog niet gebruikt.
Wijzig de code om bepaalde parametergegevens van de URL door te geven aan de controller. Bijvoorbeeld /HelloWorld/Welcome?name=Rick&numtimes=4.
Wijzig de methode Welcome om twee parameters op te nemen, zoals wordt weergegeven in de volgende code.
// 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}");
}
De voorgaande code:
- Gebruikt de functie optionele C#-parameter om aan te geven dat de
numTimesparameter standaard 1 is als er geen waarde wordt doorgegeven voor die parameter. - Gebruikt
HtmlEncoder.Default.Encodeom de app te beschermen tegen schadelijke invoer, zoals via JavaScript. - Gebruikt geïnterpoleerde tekenreeksen in
$"Hello {name}, NumTimes is: {numTimes}".
Voer de app uit en blader naar: https://localhost:{PORT}/HelloWorld/Welcome?name=Rick&numtimes=4. Vervang {PORT} door uw poortnummer.
Probeer verschillende waarden voor name en numtimes in de URL. De MVC-modelbinding systeem wijst automatisch de benoemde parameters van de queryreeks toe aan parameters in de methode. Zie Modelbinding voor meer informatie.
In de vorige afbeelding:
- Het URL-segment
Parameterswordt niet gebruikt. - De parameters
nameennumTimesworden doorgegeven in de queryreeks. - De
?(vraagteken) in de bovenstaande URL is een scheidingsteken, waarna de querytekenreeks volgt. - Het
&teken scheidt veld-waardeparen.
Vervang de Welcome methode door de volgende code:
public string Welcome(string name, int ID = 1)
{
return HtmlEncoder.Default.Encode($"Hello {name}, ID: {ID}");
}
Voer de app uit en voer de volgende URL in: https://localhost:{PORT}/HelloWorld/Welcome/3?name=Rick
In de voorgaande URL:
- Het derde URL-segment komt overeen met de routeparameter
id. - De methode
Welcomebevat een parameteriddie overeenkomt met de URL-sjabloon in de methodeMapControllerRoute. - Met de afsluitende
?wordt de queryreeksgestart.
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
In het voorgaande voorbeeld:
- Het derde URL-segment komt overeen met de routeparameter
idzoals gedefinieerd in de routeringssjabloon in hetProgram.csbestand. - De methode
Welcomebevat een parameteriddie overeenkomt met de URL-sjabloon in de methodeMapControllerRoute. - De afsluitende
?(inid?) geeft aan dat de parameteridoptioneel is.
Het Model-View-Controller (MVC) architectuurpatroon scheidt een app in drie hoofdcomponenten: Model, View, en Controller. Met het MVC-patroon kunt u apps maken die testbaar en gemakkelijker kunnen worden bijgewerkt dan traditionele monolithische apps.
Op MVC gebaseerde apps bevatten:
-
Models: klassen die de gegevens van de app vertegenwoordigen. De modelklassen gebruiken validatielogica om bedrijfsregels voor die gegevens af te dwingen. Modelobjecten halen de modelstatus meestal op en slaan deze op in een database. In deze zelfstudie haalt het
Moviemodel filmgegevens op uit een database, geeft ze door aan de weergave of werkt ze bij. Bijgewerkte gegevens worden naar een database geschreven. - V: Weergaven zijn de onderdelen die de gebruikersinterface (UI) van de app weergeven. Over het algemeen worden in deze gebruikersinterface de modelgegevens weergegeven.
-
Controllers: Klassen die:
- Browseraanvragen verwerken.
- Modelgegevens ophalen.
- Weergavesjablonen aanroepen die een antwoord retourneren.
In een MVC-app wordt in de weergave alleen informatie weergegeven. De controller verwerkt en reageert op gebruikersinvoer en -interactie. De controller verwerkt bijvoorbeeld URL-segmenten en queryreekswaarden en geeft deze waarden door aan het model. Het model kan deze waarden gebruiken om een query uit te voeren op de database. Bijvoorbeeld:
-
https://localhost:5001/Home/Privacy: hiermee geeft u deHomecontroller en de actiePrivacyop. -
https://localhost:5001/Movies/Edit/5: is een aanvraag om de film met ID=5 te bewerken met behulp van deMoviescontroller en deEdit-actie, die verderop in de zelfstudie worden beschreven.
Routegegevens worden verderop in de handleiding uitgelegd.
Het architectuurpatroon van MVC scheidt een app in drie hoofdgroepen onderdelen: Modellen, Weergaven en Controllers. Dit patroon helpt bij het bereiken van scheiding van problemen: de UI-logica hoort in de weergave. Invoerlogica hoort bij de controller. Bedrijfslogica hoort bij het model. Deze scheiding helpt bij het beheren van complexiteit bij het bouwen van een app, omdat hiermee tegelijkertijd wordt gewerkt aan één aspect van de implementatie zonder dat dit van invloed is op de code van een andere. U kunt bijvoorbeeld aan de weergavecode werken zonder dat u afhankelijk bent van de bedrijfslogicacode.
Deze concepten worden geïntroduceerd en gedemonstreerd in deze reeks zelfstudies tijdens het bouwen van een film-app. Het MVC-project bevat mappen voor de Controllers en weergaven.
Een controller toevoegen
Klik in Solution Explorermet de rechtermuisknop op Controllers >> Controller toevoegen.
>
Selecteer in het dialoogvenster Nieuw gestructureerd item toevoegen de optie Lege MVC-controller>en klik op Toevoegen.
Voer in het dialoogvenster Add New Item - MvcMovieHelloWorldController.cs in en selecteer Add.
Vervang de inhoud van Controllers/HelloWorldController.cs door de volgende code:
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...";
}
}
Elke public methode in een controller kan worden aangeroepen als een HTTP-eindpunt. In het bovenstaande voorbeeld retourneren beide methoden een tekenreeks. Noteer de opmerkingen voorafgaand aan elke methode.
Een HTTP-eindpunt:
- Is een doel-URL in de webtoepassing, zoals
https://localhost:5001/HelloWorld. - Combineert:
- Het gebruikte protocol:
HTTPS. - De netwerklocatie van de webserver, inclusief de TCP-poort:
localhost:5001. - De doel-URI:
HelloWorld.
- Het gebruikte protocol:
De eerste opmerking geeft aan dat dit een HTTP GET- methode is die wordt aangeroepen door /HelloWorld/ toe te voegen aan de basis-URL.
De tweede opmerking geeft een HTTP GET- methode op die wordt aangeroepen door /HelloWorld/Welcome/ toe te voegen aan de URL. Later in de tutorial wordt de scaffolding-engine gebruikt om HTTP POST methoden te genereren, waarmee gegevens worden bijgewerkt.
Voer de app uit zonder het foutopsporingsprogramma door op Ctrl+F5-te drukken.
Voeg /HelloWorld toe aan het pad in de adresbalk. De methode Index retourneert een tekenreeks.
MVC roept controllerklassen aan en de actiemethoden hierin, afhankelijk van de binnenkomende URL. De standaard-URL-routeringslogica die door MVC wordt gebruikt, gebruikt een indeling zoals deze om te bepalen welke code moet worden aangeroepen:
/[Controller]/[ActionName]/[Parameters]
De routeringsindeling wordt ingesteld in het Program.cs-bestand.
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
Wanneer u naar de app bladert en geen URL-segmenten opgeeft, wordt deze standaard ingesteld op de controller 'Home' en de methode 'Index' die is opgegeven in de sjabloonregel die hierboven is gemarkeerd. In de voorgaande URL-segmenten:
- Het eerste URL-segment bepaalt de controllerklasse die moet worden uitgevoerd. Daarom wordt
localhost:5001/HelloWorldtoegewezen aan de klasse HelloWorld Controller. - Het tweede deel van het URL-segment bepaalt de actiemethode voor de klasse.
localhost:5001/HelloWorld/Indexzorgt er dus voor dat deIndexmethode van deHelloWorldController-klasse wordt uitgevoerd. U hoeft alleen naarlocalhost:5001/HelloWorldte bladeren en deIndexmethode is standaard aangeroepen.Indexis de standaardmethode die op een controller wordt aangeroepen als er niet expliciet een methodenaam is opgegeven. - Het derde deel van het URL-segment (
id) is voor routegegevens. Routegegevens worden verderop in de handleiding uitgelegd.
Blader naar: https://localhost:{PORT}/HelloWorld/Welcome. Vervang {PORT} door uw poortnummer.
De methode Welcome wordt uitgevoerd en retourneert de tekenreeks This is the Welcome action method.... Voor deze URL is de controller HelloWorld en de actiemethode is Welcome. U hebt het [Parameters] deel van de URL nog niet gebruikt.
Wijzig de code om bepaalde parametergegevens van de URL door te geven aan de controller. Bijvoorbeeld /HelloWorld/Welcome?name=Rick&numtimes=4.
Wijzig de methode Welcome om twee parameters op te nemen, zoals wordt weergegeven in de volgende code.
// 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}");
}
De voorgaande code:
- Gebruikt de functie optionele C#-parameter om aan te geven dat de
numTimesparameter standaard 1 is als er geen waarde wordt doorgegeven voor die parameter. - Gebruikt
HtmlEncoder.Default.Encodeom de app te beschermen tegen schadelijke invoer, zoals via JavaScript. - Gebruikt geïnterpoleerde tekenreeksen in
$"Hello {name}, NumTimes is: {numTimes}".
Voer de app uit en blader naar: https://localhost:{PORT}/HelloWorld/Welcome?name=Rick&numtimes=4. Vervang {PORT} door uw poortnummer.
Probeer verschillende waarden voor name en numtimes in de URL. De MVC-modelbinding systeem wijst automatisch de benoemde parameters van de queryreeks toe aan parameters in de methode. Zie Modelbinding voor meer informatie.
In de vorige afbeelding:
- Het URL-segment
Parameterswordt niet gebruikt. - De parameters
nameennumTimesworden doorgegeven in de queryreeks. - De
?(vraagteken) in de bovenstaande URL is een scheidingsteken, waarna de querytekenreeks volgt. - Het
&teken scheidt veld-waardeparen.
Vervang de Welcome methode door de volgende code:
public string Welcome(string name, int ID = 1)
{
return HtmlEncoder.Default.Encode($"Hello {name}, ID: {ID}");
}
Voer de app uit en voer de volgende URL in: https://localhost:{PORT}/HelloWorld/Welcome/3?name=Rick
In de voorgaande URL:
- Het derde URL-segment komt overeen met de routeparameter
id. - De methode
Welcomebevat een parameteriddie overeenkomt met de URL-sjabloon in de methodeMapControllerRoute. - Met de afsluitende
?wordt de queryreeksgestart.
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
In het voorgaande voorbeeld:
- Het derde URL-segment komt overeen met de routeparameter
id. - De methode
Welcomebevat een parameteriddie overeenkomt met de URL-sjabloon in de methodeMapControllerRoute. - De afsluitende
?(inid?) geeft aan dat de parameteridoptioneel is.
Het Model-View-Controller (MVC) architectuurpatroon scheidt een app in drie hoofdcomponenten: Model, View, en Controller. Met het MVC-patroon kunt u apps maken die testbaar en gemakkelijker kunnen worden bijgewerkt dan traditionele monolithische apps.
Op MVC gebaseerde apps bevatten:
-
Models: klassen die de gegevens van de app vertegenwoordigen. De modelklassen gebruiken validatielogica om bedrijfsregels voor die gegevens af te dwingen. Modelobjecten halen de modelstatus meestal op en slaan deze op in een database. In deze zelfstudie haalt het
Moviemodel filmgegevens op uit een database, geeft ze door aan de weergave of werkt ze bij. Bijgewerkte gegevens worden naar een database geschreven. - V: Weergaven zijn de onderdelen die de gebruikersinterface (UI) van de app weergeven. Over het algemeen worden in deze gebruikersinterface de modelgegevens weergegeven.
-
Controllers: Klassen die:
- Browseraanvragen verwerken.
- Modelgegevens ophalen.
- Weergavesjablonen aanroepen die een antwoord retourneren.
In een MVC-app wordt in de weergave alleen informatie weergegeven. De controller verwerkt en reageert op gebruikersinvoer en -interactie. De controller verwerkt bijvoorbeeld URL-segmenten en queryreekswaarden en geeft deze waarden door aan het model. Het model kan deze waarden gebruiken om een query uit te voeren op de database. Bijvoorbeeld:
-
https://localhost:5001/Home/Privacy: hiermee geeft u deHomecontroller en de actiePrivacyop. -
https://localhost:5001/Movies/Edit/5: is een aanvraag om de film met ID=5 te bewerken met behulp van deMoviescontroller en deEdit-actie, die verderop in de zelfstudie worden beschreven.
Routegegevens worden verderop in de handleiding uitgelegd.
Het architectuurpatroon van MVC scheidt een app in drie hoofdgroepen onderdelen: Modellen, Weergaven en Controllers. Dit patroon helpt bij het bereiken van scheiding van problemen: de UI-logica hoort in de weergave. Invoerlogica hoort bij de controller. Bedrijfslogica hoort bij het model. Deze scheiding helpt bij het beheren van complexiteit bij het bouwen van een app, omdat hiermee tegelijkertijd wordt gewerkt aan één aspect van de implementatie zonder dat dit van invloed is op de code van een andere. U kunt bijvoorbeeld aan de weergavecode werken zonder dat u afhankelijk bent van de bedrijfslogicacode.
Deze concepten worden geïntroduceerd en gedemonstreerd in deze reeks zelfstudies tijdens het bouwen van een film-app. Het MVC-project bevat mappen voor de Controllers en weergaven.
Een controller toevoegen
Klik in Solution Explorermet de rechtermuisknop op Controllers >> Controller toevoegen.
>
Selecteer in het dialoogvenster Nieuw gestructureerd item toevoegen de optie Lege MVC-controller>en klik op Toevoegen.
Voer in het dialoogvenster Add New Item - MvcMovieHelloWorldController.cs in en selecteer Add.
Vervang de inhoud van Controllers/HelloWorldController.cs door de volgende code:
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...";
}
}
Elke public methode in een controller kan worden aangeroepen als een HTTP-eindpunt. In het bovenstaande voorbeeld retourneren beide methoden een tekenreeks. Noteer de opmerkingen voorafgaand aan elke methode.
Een HTTP-eindpunt:
- Is een doel-URL in de webtoepassing, zoals
https://localhost:5001/HelloWorld. - Combineert:
- Het gebruikte protocol:
HTTPS. - De netwerklocatie van de webserver, inclusief de TCP-poort:
localhost:5001. - De doel-URI:
HelloWorld.
- Het gebruikte protocol:
De eerste opmerking geeft aan dat dit een HTTP GET- methode is die wordt aangeroepen door /HelloWorld/ toe te voegen aan de basis-URL.
De tweede opmerking geeft een HTTP GET- methode op die wordt aangeroepen door /HelloWorld/Welcome/ toe te voegen aan de URL. Later in de tutorial wordt de scaffolding-engine gebruikt om HTTP POST methoden te genereren, waarmee gegevens worden bijgewerkt.
Voer de app uit zonder het foutopsporingsprogramma door op Ctrl+F5-te drukken.
Voeg /HelloWorld toe aan het pad in de adresbalk. De methode Index retourneert een tekenreeks.
MVC roept controllerklassen aan en de actiemethoden hierin, afhankelijk van de binnenkomende URL. De standaard-URL-routeringslogica die door MVC wordt gebruikt, gebruikt een indeling zoals deze om te bepalen welke code moet worden aangeroepen:
/[Controller]/[ActionName]/[Parameters]
De routeringsindeling wordt ingesteld in het Program.cs-bestand.
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
Wanneer u naar de app bladert en geen URL-segmenten opgeeft, wordt deze standaard ingesteld op de controller 'Home' en de methode 'Index' die is opgegeven in de sjabloonregel die hierboven is gemarkeerd. In de voorgaande URL-segmenten:
- Het eerste URL-segment bepaalt de controllerklasse die moet worden uitgevoerd. Daarom wordt
localhost:5001/HelloWorldtoegewezen aan de klasse HelloWorld Controller. - Het tweede deel van het URL-segment bepaalt de actiemethode voor de klasse.
localhost:5001/HelloWorld/Indexzorgt er dus voor dat deIndexmethode van deHelloWorldController-klasse wordt uitgevoerd. U hoeft alleen naarlocalhost:5001/HelloWorldte bladeren en deIndexmethode is standaard aangeroepen.Indexis de standaardmethode die op een controller wordt aangeroepen als er niet expliciet een methodenaam is opgegeven. - Het derde deel van het URL-segment (
id) is voor routegegevens. Routegegevens worden verderop in de handleiding uitgelegd.
Blader naar: https://localhost:{PORT}/HelloWorld/Welcome. Vervang {PORT} door uw poortnummer.
De methode Welcome wordt uitgevoerd en retourneert de tekenreeks This is the Welcome action method.... Voor deze URL is de controller HelloWorld en de actiemethode is Welcome. U hebt het [Parameters] deel van de URL nog niet gebruikt.
Wijzig de code om bepaalde parametergegevens van de URL door te geven aan de controller. Bijvoorbeeld /HelloWorld/Welcome?name=Rick&numtimes=4.
Wijzig de methode Welcome om twee parameters op te nemen, zoals wordt weergegeven in de volgende code.
// 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}");
}
De voorgaande code:
- Gebruikt de functie optionele C#-parameter om aan te geven dat de
numTimesparameter standaard 1 is als er geen waarde wordt doorgegeven voor die parameter. - Gebruikt
HtmlEncoder.Default.Encodeom de app te beschermen tegen schadelijke invoer, zoals via JavaScript. - Gebruikt geïnterpoleerde tekenreeksen in
$"Hello {name}, NumTimes is: {numTimes}".
Voer de app uit en blader naar: https://localhost:{PORT}/HelloWorld/Welcome?name=Rick&numtimes=4. Vervang {PORT} door uw poortnummer.
Probeer verschillende waarden voor name en numtimes in de URL. De MVC-modelbinding systeem wijst automatisch de benoemde parameters van de queryreeks toe aan parameters in de methode. Zie Modelbinding voor meer informatie.
In de vorige afbeelding:
- Het URL-segment
Parameterswordt niet gebruikt. - De parameters
nameennumTimesworden doorgegeven in de queryreeks. - De
?(vraagteken) in de bovenstaande URL is een scheidingsteken, waarna de querytekenreeks volgt. - Het
&teken scheidt veld-waardeparen.
Vervang de Welcome methode door de volgende code:
public string Welcome(string name, int ID = 1)
{
return HtmlEncoder.Default.Encode($"Hello {name}, ID: {ID}");
}
Voer de app uit en voer de volgende URL in: https://localhost:{PORT}/HelloWorld/Welcome/3?name=Rick
In de voorgaande URL:
- Het derde URL-segment komt overeen met de routeparameter
id. - De methode
Welcomebevat een parameteriddie overeenkomt met de URL-sjabloon in de methodeMapControllerRoute. - Met de afsluitende
?wordt de queryreeksgestart.
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
In het voorgaande voorbeeld:
- Het derde URL-segment komt overeen met de routeparameter
id. - De methode
Welcomebevat een parameteriddie overeenkomt met de URL-sjabloon in de methodeMapControllerRoute. - De afsluitende
?(inid?) geeft aan dat de parameteridoptioneel is.
Het Model-View-Controller (MVC) architectuurpatroon scheidt een app in drie hoofdcomponenten: Model, View, en Controller. Met het MVC-patroon kunt u apps maken die testbaar en gemakkelijker kunnen worden bijgewerkt dan traditionele monolithische apps.
Op MVC gebaseerde apps bevatten:
-
Models: klassen die de gegevens van de app vertegenwoordigen. De modelklassen gebruiken validatielogica om bedrijfsregels voor die gegevens af te dwingen. Modelobjecten halen de modelstatus meestal op en slaan deze op in een database. In deze zelfstudie haalt het
Moviemodel filmgegevens op uit een database, geeft ze door aan de weergave of werkt ze bij. Bijgewerkte gegevens worden naar een database geschreven. - V: Weergaven zijn de onderdelen die de gebruikersinterface (UI) van de app weergeven. Over het algemeen worden in deze gebruikersinterface de modelgegevens weergegeven.
-
Controllers: Klassen die:
- Browseraanvragen verwerken.
- Modelgegevens ophalen.
- Weergavesjablonen aanroepen die een antwoord retourneren.
In een MVC-app wordt in de weergave alleen informatie weergegeven. De controller verwerkt en reageert op gebruikersinvoer en -interactie. De controller verwerkt bijvoorbeeld URL-segmenten en queryreekswaarden en geeft deze waarden door aan het model. Het model kan deze waarden gebruiken om een query uit te voeren op de database. Bijvoorbeeld:
-
https://localhost:5001/Home/Privacy: hiermee geeft u deHomecontroller en de actiePrivacyop. -
https://localhost:5001/Movies/Edit/5: is een aanvraag om de film met ID=5 te bewerken met behulp van deMoviescontroller en deEdit-actie, die verderop in de zelfstudie worden beschreven.
Routegegevens worden verderop in de handleiding uitgelegd.
Het architectuurpatroon van MVC scheidt een app in drie hoofdgroepen onderdelen: Modellen, Weergaven en Controllers. Dit patroon helpt bij het bereiken van scheiding van problemen: de UI-logica hoort in de weergave. Invoerlogica hoort bij de controller. Bedrijfslogica hoort bij het model. Deze scheiding helpt bij het beheren van complexiteit bij het bouwen van een app, omdat hiermee tegelijkertijd wordt gewerkt aan één aspect van de implementatie zonder dat dit van invloed is op de code van een andere. U kunt bijvoorbeeld aan de weergavecode werken zonder dat u afhankelijk bent van de bedrijfslogicacode.
Deze concepten worden geïntroduceerd en gedemonstreerd in deze reeks zelfstudies tijdens het bouwen van een film-app. Het MVC-project bevat mappen voor de Controllers en weergaven.
Een controller toevoegen
Klik in Solution Explorermet de rechtermuisknop op Controllers >> Controller toevoegen.
>
Selecteer in het dialoogvenster Nieuw gestructureerd item toevoegen de optie Lege MVC-controller>en klik op Toevoegen.
Voer in het dialoogvenster Add New Item - MvcMovieHelloWorldController.cs in en selecteer Add.
Vervang de inhoud van Controllers/HelloWorldController.cs door de volgende code:
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...";
}
}
}
Elke public methode in een controller kan worden aangeroepen als een HTTP-eindpunt. In het bovenstaande voorbeeld retourneren beide methoden een tekenreeks. Noteer de opmerkingen voorafgaand aan elke methode.
Een HTTP-eindpunt:
- Is een doel-URL in de webtoepassing, zoals
https://localhost:5001/HelloWorld. - Combineert:
- Het gebruikte protocol:
HTTPS. - De netwerklocatie van de webserver, inclusief de TCP-poort:
localhost:5001. - De doel-URI:
HelloWorld.
- Het gebruikte protocol:
De eerste opmerking geeft aan dat dit een HTTP GET- methode is die wordt aangeroepen door /HelloWorld/ toe te voegen aan de basis-URL.
De tweede opmerking geeft een HTTP GET- methode op die wordt aangeroepen door /HelloWorld/Welcome/ toe te voegen aan de URL. Later in de tutorial wordt de scaffolding-engine gebruikt om HTTP POST methoden te genereren, waarmee gegevens worden bijgewerkt.
Voer de app uit zonder het foutopsporingsprogramma.
Voeg 'HelloWorld' toe aan het pad in de adresbalk. De methode Index retourneert een tekenreeks.
MVC roept controllerklassen aan en de actiemethoden hierin, afhankelijk van de binnenkomende URL. De standaard-URL-routeringslogica die door MVC wordt gebruikt, gebruikt een indeling zoals deze om te bepalen welke code moet worden aangeroepen:
/[Controller]/[ActionName]/[Parameters]
De routeringsindeling wordt ingesteld in het Program.cs-bestand.
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
Wanneer u naar de app bladert en geen URL-segmenten opgeeft, wordt deze standaard ingesteld op de controller 'Home' en de methode 'Index' die is opgegeven in de sjabloonregel die hierboven is gemarkeerd. In de voorgaande URL-segmenten:
- Het eerste URL-segment bepaalt de controllerklasse die moet worden uitgevoerd. Daarom wordt
localhost:5001/HelloWorldtoegewezen aan de klasse HelloWorld Controller. - Het tweede deel van het URL-segment bepaalt de actiemethode voor de klasse.
localhost:5001/HelloWorld/Indexzorgt er dus voor dat deIndexmethode van deHelloWorldController-klasse wordt uitgevoerd. U hoeft alleen naarlocalhost:5001/HelloWorldte bladeren en deIndexmethode is standaard aangeroepen.Indexis de standaardmethode die op een controller wordt aangeroepen als er niet expliciet een methodenaam is opgegeven. - Het derde deel van het URL-segment (
id) is voor routegegevens. Routegegevens worden verderop in de handleiding uitgelegd.
Blader naar: https://localhost:{PORT}/HelloWorld/Welcome. Vervang {PORT} door uw poortnummer.
De methode Welcome wordt uitgevoerd en retourneert de tekenreeks This is the Welcome action method.... Voor deze URL is de controller HelloWorld en de actiemethode is Welcome. U hebt het [Parameters] deel van de URL nog niet gebruikt.
Wijzig de code om bepaalde parametergegevens van de URL door te geven aan de controller. Bijvoorbeeld /HelloWorld/Welcome?name=Rick&numtimes=4.
Wijzig de methode Welcome om twee parameters op te nemen, zoals wordt weergegeven in de volgende code.
// 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}");
}
De voorgaande code:
- Gebruikt de functie optionele C#-parameter om aan te geven dat de
numTimesparameter standaard 1 is als er geen waarde wordt doorgegeven voor die parameter. - Gebruikt
HtmlEncoder.Default.Encodeom de app te beschermen tegen schadelijke invoer, zoals via JavaScript. - Gebruikt geïnterpoleerde tekenreeksen in
$"Hello {name}, NumTimes is: {numTimes}".
Voer de app uit en blader naar: https://localhost:{PORT}/HelloWorld/Welcome?name=Rick&numtimes=4. Vervang {PORT} door uw poortnummer.
Probeer verschillende waarden voor name en numtimes in de URL. De MVC-modelbinding systeem wijst automatisch de benoemde parameters van de queryreeks toe aan parameters in de methode. Zie Modelbinding voor meer informatie.
In de vorige afbeelding:
- Het URL-segment
Parameterswordt niet gebruikt. - De parameters
nameennumTimesworden doorgegeven in de queryreeks. - De
?(vraagteken) in de bovenstaande URL is een scheidingsteken, waarna de querytekenreeks volgt. - Het
&teken scheidt veld-waardeparen.
Vervang de Welcome methode door de volgende code:
public string Welcome(string name, int ID = 1)
{
return HtmlEncoder.Default.Encode($"Hello {name}, ID: {ID}");
}
Voer de app uit en voer de volgende URL in: https://localhost:{PORT}/HelloWorld/Welcome/3?name=Rick
In de voorgaande URL:
- Het derde URL-segment komt overeen met de routeparameter
id. - De methode
Welcomebevat een parameteriddie overeenkomt met de URL-sjabloon in de methodeMapControllerRoute. - Met de afsluitende
?wordt de queryreeksgestart.
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
In het voorgaande voorbeeld:
- Het derde URL-segment komt overeen met de routeparameter
id. - De methode
Welcomebevat een parameteriddie overeenkomt met de URL-sjabloon in de methodeMapControllerRoute. - De afsluitende
?(inid?) geeft aan dat de parameteridoptioneel is.
Het Model-View-Controller (MVC) architectuurpatroon scheidt een app in drie hoofdcomponenten: Model, View, en Controller. Met het MVC-patroon kunt u apps maken die testbaar en gemakkelijker kunnen worden bijgewerkt dan traditionele monolithische apps.
Op MVC gebaseerde apps bevatten:
-
Models: klassen die de gegevens van de app vertegenwoordigen. De modelklassen gebruiken validatielogica om bedrijfsregels voor die gegevens af te dwingen. Modelobjecten halen de modelstatus meestal op en slaan deze op in een database. In deze zelfstudie haalt het
Moviemodel filmgegevens op uit een database, geeft ze door aan de weergave of werkt ze bij. Bijgewerkte gegevens worden naar een database geschreven. - V: Weergaven zijn de onderdelen die de gebruikersinterface (UI) van de app weergeven. Over het algemeen worden in deze gebruikersinterface de modelgegevens weergegeven.
-
Controllers: Klassen die:
- Browseraanvragen verwerken.
- Modelgegevens ophalen.
- Weergavesjablonen aanroepen die een antwoord retourneren.
In een MVC-app wordt in de weergave alleen informatie weergegeven. De controller verwerkt en reageert op gebruikersinvoer en -interactie. De controller verwerkt bijvoorbeeld URL-segmenten en queryreekswaarden en geeft deze waarden door aan het model. Het model kan deze waarden gebruiken om een query uit te voeren op de database. Bijvoorbeeld:
-
https://localhost:5001/Home/Privacy: hiermee geeft u deHomecontroller en de actiePrivacyop. -
https://localhost:5001/Movies/Edit/5: is een aanvraag om de film met ID=5 te bewerken met behulp van deMoviescontroller en deEdit-actie, die verderop in de zelfstudie worden beschreven.
Routegegevens worden verderop in de handleiding uitgelegd.
Het architectuurpatroon van MVC scheidt een app in drie hoofdgroepen onderdelen: Modellen, Weergaven en Controllers. Dit patroon helpt bij het bereiken van scheiding van problemen: de UI-logica hoort in de weergave. Invoerlogica hoort bij de controller. Bedrijfslogica hoort bij het model. Deze scheiding helpt bij het beheren van complexiteit bij het bouwen van een app, omdat hiermee tegelijkertijd wordt gewerkt aan één aspect van de implementatie zonder dat dit van invloed is op de code van een andere. U kunt bijvoorbeeld aan de weergavecode werken zonder dat u afhankelijk bent van de bedrijfslogicacode.
Deze concepten worden geïntroduceerd en gedemonstreerd in deze reeks zelfstudies tijdens het bouwen van een film-app. Het MVC-project bevat mappen voor de Controllers en weergaven.
Een controller toevoegen
Klik in Solution Explorermet de rechtermuisknop op Controllers >> Controller toevoegen.
>
Selecteer in het dialoogvenster Scaffold toevoegen de optie MVC-controller - Leeg.
Voer in het dialoogvenster Nieuw item toevoegen - MvcMovieHelloWorldController.cs in en selecteer Toevoegen.
Vervang de inhoud van Controllers/HelloWorldController.cs door het volgende:
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...";
}
}
}
Elke public methode in een controller kan worden aangeroepen als een HTTP-eindpunt. In het bovenstaande voorbeeld retourneren beide methoden een tekenreeks. Noteer de opmerkingen voorafgaand aan elke methode.
Een HTTP-eindpunt:
- Is een doel-URL in de webtoepassing, zoals
https://localhost:5001/HelloWorld. - Combineert:
- Het gebruikte protocol:
HTTPS. - De netwerklocatie van de webserver, inclusief de TCP-poort:
localhost:5001. - De doel-URI:
HelloWorld.
- Het gebruikte protocol:
De eerste opmerking geeft aan dat dit een HTTP GET- methode is die wordt aangeroepen door /HelloWorld/ toe te voegen aan de basis-URL.
De tweede opmerking geeft een HTTP GET- methode op die wordt aangeroepen door /HelloWorld/Welcome/ toe te voegen aan de URL. Later in de tutorial wordt de scaffolding-engine gebruikt om HTTP POST methoden te genereren, waarmee gegevens worden bijgewerkt.
Voer de app uit zonder het foutopsporingsprogramma.
Voeg 'HelloWorld' toe aan het pad in de adresbalk. De methode Index retourneert een tekenreeks.
MVC roept controllerklassen aan en de actiemethoden hierin, afhankelijk van de binnenkomende URL. De standaard-URL-routeringslogica die door MVC wordt gebruikt, gebruikt een indeling zoals deze om te bepalen welke code moet worden aangeroepen:
/[Controller]/[ActionName]/[Parameters]
De routeringsindeling wordt ingesteld in de methode Configure in het bestand Startup.cs.
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
Wanneer u naar de app bladert en geen URL-segmenten opgeeft, wordt deze standaard ingesteld op de controller 'Home' en de methode 'Index' die is opgegeven in de sjabloonregel die hierboven is gemarkeerd. In de voorgaande URL-segmenten:
- Het eerste URL-segment bepaalt de controllerklasse die moet worden uitgevoerd. Dus
localhost:5001/HelloWorldkomt overeen met de Controller-klasse HelloWorld. - Het tweede deel van het URL-segment bepaalt de actiemethode voor de klasse.
localhost:5001/HelloWorld/Indexzorgt er dus voor dat deIndexmethode van deHelloWorldController-klasse wordt uitgevoerd. U hoeft alleen naarlocalhost:5001/HelloWorldte bladeren en deIndexmethode is standaard aangeroepen.Indexis de standaardmethode die op een controller wordt aangeroepen als er niet expliciet een methodenaam is opgegeven. - Het derde deel van het URL-segment (
id) is voor routegegevens. Routegegevens worden verderop in de handleiding uitgelegd.
Blader naar: https://localhost:{PORT}/HelloWorld/Welcome. Vervang {PORT} door uw poortnummer.
De methode Welcome wordt uitgevoerd en retourneert de tekenreeks This is the Welcome action method.... Voor deze URL is de controller HelloWorld en de actiemethode is Welcome. U hebt het [Parameters] deel van de URL nog niet gebruikt.
Wijzig de code om bepaalde parametergegevens van de URL door te geven aan de controller. Bijvoorbeeld /HelloWorld/Welcome?name=Rick&numtimes=4.
Wijzig de methode Welcome om twee parameters op te nemen, zoals wordt weergegeven in de volgende code.
// 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}");
}
De voorgaande code:
- Gebruikt de functie optionele C#-parameter om aan te geven dat de
numTimesparameter standaard 1 is als er geen waarde wordt doorgegeven voor die parameter. - Gebruikt
HtmlEncoder.Default.Encodeom de app te beschermen tegen schadelijke invoer, zoals via JavaScript. - Gebruikt geïnterpoleerde tekenreeksen in
$"Hello {name}, NumTimes is: {numTimes}".
Voer de app uit en blader naar: https://localhost:{PORT}/HelloWorld/Welcome?name=Rick&numtimes=4. Vervang {PORT} door uw poortnummer.
Probeer verschillende waarden voor name en numtimes in de URL. De MVC-modelbinding systeem wijst automatisch de benoemde parameters van de queryreeks toe aan parameters in de methode. Zie Modelbinding voor meer informatie.
In de vorige afbeelding:
- Het URL-segment
Parameterswordt niet gebruikt. - De parameters
nameennumTimesworden doorgegeven in de queryreeks. - De
?(vraagteken) in de bovenstaande URL is een scheidingsteken, waarna de querytekenreeks volgt. - Het
&teken scheidt veld-waardeparen.
Vervang de Welcome methode door de volgende code:
public string Welcome(string name, int ID = 1)
{
return HtmlEncoder.Default.Encode($"Hello {name}, ID: {ID}");
}
Voer de app uit en voer de volgende URL in: https://localhost:{PORT}/HelloWorld/Welcome/3?name=Rick
In de voorgaande URL:
- Het derde URL-segment komt overeen met de routeparameter
id. - De methode
Welcomebevat een parameteriddie overeenkomt met de URL-sjabloon in de methodeMapControllerRoute. - Met de afsluitende
?wordt de queryreeksgestart.
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
In het voorgaande voorbeeld:
- Het derde URL-segment komt overeen met de routeparameter
id. - De methode
Welcomebevat een parameteriddie overeenkomt met de URL-sjabloon in de methodeMapControllerRoute. - De afsluitende
?(inid?) geeft aan dat de parameteridoptioneel is.