Sdílet prostřednictvím


Část 2: Přidání kontroleru do aplikace ASP.NET Core MVC

Poznámka:

Toto není nejnovější verze tohoto článku. Aktuální verzi tohoto článku najdete v verzi .NET 9.

Varování

Tato verze ASP.NET Core se už nepodporuje. Další informace najdete v zásadách podpory .NET a .NET Core. Aktuální vydání najdete v verzi .NET 9 tohoto článku.

Důležité

Tyto informace se týkají předběžného vydání produktu, který může být podstatně změněn před komerčním vydáním. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.

Aktuální vydání najdete ve verzi tohoto článku .NET 9.

Autor: Rick Anderson

Model-View-Controller (MVC) architektonický vzor odděluje aplikaci na tři hlavní komponenty: Model, View a Controller. Model MVC pomáhá vytvářet aplikace, které jsou testovatelné a snadněji se aktualizují než tradiční monolitické aplikace.

Aplikace založené na MVC obsahují:

  • Modely: Třídy, které představují data aplikace. Třídy modelu používají logiku ověřování k vynucení obchodních pravidel pro tato data. Objekty modelu obvykle načítají a ukládají stav modelu do databáze. V tomto kurzu Movie model načítá filmová data z databáze, poskytuje je do zobrazení nebo aktualizuje. Aktualizovaná data se zapisují do databáze.
  • Zobrazení: Komponenty, které zobrazují uživatelské rozhraní aplikace, se nazývají zobrazení. Obecně platí, že toto uživatelské rozhraní zobrazuje data modelu.
  • Controllers: Třídy, které:
    • Zpracování požadavků v prohlížeči
    • Načtení dat modelu
    • Šablony zobrazení volání, které vracejí odpověď

V aplikaci MVC se v zobrazení zobrazují jenom informace. Kontroler zpracovává uživatelské vstupy a interakce a reaguje na ně. Kontroler například zpracovává segmenty adres URL a hodnoty řetězce dotazu a předává tyto hodnoty do modelu. Model může tyto hodnoty použít k dotazování databáze. Příklad:

  • https://localhost:5001/Home/Privacy: určuje Home kontroler a Privacy akci.
  • https://localhost:5001/Movies/Edit/5: je žádost o úpravu videa s ID=5 pomocí Movies kontroleru a Edit akce, které jsou podrobně popsány dále v kurzu.

Údaje o trase jsou vysvětleny později v tutoriálu.

Model architektury MVC odděluje aplikaci do tří hlavních skupin komponent: Modely, zobrazení a kontrolery. Tento model pomáhá dosáhnout oddělení obav: Logika uživatelského rozhraní patří do zobrazení. Vstupní logika patří do kontroleru. Obchodní logika patří do modelu. Toto oddělení pomáhá při sestavování aplikace spravovat složitost, protože umožňuje pracovat na jednom aspektu implementace najednou, aniž by to mělo vliv na kód jiného. Například můžete pracovat na kódu zobrazení bez závislosti na kódu obchodní logiky.

Tyto koncepty jsou představeny a demonstrována v této sérii kurzů při vytváření filmové aplikace. Projekt MVC obsahuje složky pro kontrolery a zobrazení.

Přidání kontroleru

V Průzkumníku řešení klepněte pravým tlačítkem myši na Controllers > Přidat > Controller.

Klikněte pravým tlačítkem myši na Průzkumník řešení, Kontrolery>. Přidat > kontroler

V dialogovém okně Přidat novou vygenerovanou položku vyberte kontroler MVC – Prázdný>Přidat.

Přidání kontroleru MVC

V dialogovém okně Přidat novou položku – MvcMovie zadejte HelloWorldController.cs a vyberte Přidat.

Controllers/HelloWorldController.cs Obsah nahraďte následujícím kódem:

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...";
    }
}

Každá public metoda v kontroleru je voláná jako koncový bod HTTP. V ukázce výše vrátí obě metody řetězec. Všimněte si komentářů předcházejících každé metodě.

Koncový bod HTTP:

  • Je cílová adresa URL ve webové aplikaci, například https://localhost:5001/HelloWorld.
  • Kombinuje:
    • Použitý protokol: HTTPS.
    • Síťové umístění webového serveru, včetně portu TCP: localhost:5001.
    • Cílový identifikátor URI: HelloWorld.

První komentář uvádí, že se jedná o metodu HTTP GET , která se vyvolá připojením /HelloWorld/ k základní adrese URL.

Druhý komentář určuje metodu HTTP GET , která se vyvolá připojením /HelloWorld/Welcome/ k adrese URL. Později během tutoriálu se modul scaffolding používá ke generování metod HTTP POST, které aktualizují data.

Spusťte aplikaci bez ladicího programu stisknutím klávesy Ctrl+F5.

Přidejte /HelloWorld k cestě v adresním řádku. Metoda Index vrátí řetězec.

Okno prohlížeče s odpovědí aplikace na tuto výchozí akci

MVC vyvolá třídy kontroleru a metody akcí v nich v závislosti na příchozí adrese URL. Výchozí logika směrování adres URL používaná MVC používá formát, který určuje, jaký kód se má vyvolat:

/[Controller]/[ActionName]/[Parameters]

Formát směrování je v Program.cs souboru nastavený.

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

Když přejdete do aplikace a nezadáte žádné segmenty adresy URL, použije se výchozí kontroler "Home" a metoda Index zadaná ve výše uvedeném řádku šablony. V předchozích segmentech URL:

  • První segment adresy URL určuje třídu kontroleru, která se má spustit. Proto localhost:5001/HelloWorld se mapuje na třídu HelloWorld Controller.
  • Druhá část segmentu adresy URL určuje metodu akce pro třídu. Proto localhost:5001/HelloWorld/Index způsobí spuštění Index metody HelloWorldController třídy. Všimněte si, že stačilo procházet do localhost:5001/HelloWorld, a metoda Index se volala ve výchozím nastavení. Index je výchozí metoda, která bude volána na kontroleru, pokud není explicitně zadán název metody.
  • Třetí část segmentu adresy URL ( id) je určená pro směrovací data. Data směrování jsou vysvětlena později v kurzu.

Přejděte na: https://localhost:{PORT}/HelloWorld/Welcome. Nahraďte {PORT} číslem portu.

Metoda Welcome se spustí a vrátí řetězec This is the Welcome action method.... Pro tuto adresu URL je HelloWorld kontroler a Welcome je to metoda akce. Zatím jste nepoužili [Parameters] část adresy URL.

Okno prohlížeče zobrazuje odpověď aplikace: Toto je metoda akce s názvem Welcome

Upravte kód tak, aby předával některé informace o parametrech z adresy URL kontroleru. Například /HelloWorld/Welcome?name=Rick&numtimes=4.

Změňte metodu Welcome tak, aby zahrnovala dva parametry, jak je znázorněno v následujícím kódu.

// 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}");
}

Předchozí kód:

  • Použije funkci volitelného parametru jazyka C# k označení, že numTimes parametr má výchozí hodnotu 1, pokud pro tento parametr není předána žádná hodnota.
  • Slouží HtmlEncoder.Default.Encode k ochraně aplikace před škodlivým vstupem, například prostřednictvím JavaScriptu.
  • Používá interpolované řetězce v $"Hello {name}, NumTimes is: {numTimes}".

Spusťte aplikaci a přejděte na: https://localhost:{PORT}/HelloWorld/Welcome?name=Rick&numtimes=4. Nahraďte {PORT} číslem portu.

Vyzkoušejte jiné hodnoty pro name a numtimes v adrese URL. Systém vazeb modelu MVC automaticky mapuje pojmenované parametry z řetězce dotazu na parametry v metodě. Další informace najdete v tématu Model Binding.

Okno prohlížeče s odpovědí aplikace Hello Rick, NumTimes je: 4

Na předchozím obrázku:

  • Segment Parameters adresy URL se nepoužívá.
  • Parametry name a numTimes se předávají v řetězci dotazu .
  • ( ? Otazník) ve výše uvedené adrese URL je oddělovač a řetězec dotazu následuje.
  • Znak & odděluje páry hodnot pole.

Nahraďte metodu Welcome následujícím kódem:

public string Welcome(string name, int ID = 1)
{
    return HtmlEncoder.Default.Encode($"Hello {name}, ID: {ID}");
}

Spusťte aplikaci a zadejte následující adresu URL: https://localhost:{PORT}/HelloWorld/Welcome/3?name=Rick

V předchozí adrese URL:

  • Třetí segment adresy URL odpovídal parametru idtrasy .
  • Tato Welcome metoda obsahuje parametr id , který odpovídá šabloně adresy URL v MapControllerRoute metodě.
  • ? Koncový řetězec dotazu spustí.
app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

V předchozím příkladu:

  • Třetí segment adresy URL odpovídal parametru id trasy definovanému v šabloně směrování v Program.cs souboru.
  • Tato Welcome metoda obsahuje parametr id , který odpovídá šabloně adresy URL v MapControllerRoute metodě.
  • Koncová ? hodnota (v id?) označuje, že id parametr je volitelný.

Model-View-Controller (MVC) architektonický vzor odděluje aplikaci na tři hlavní komponenty: Model, View a Controller. Model MVC pomáhá vytvářet aplikace, které jsou testovatelné a snadněji se aktualizují než tradiční monolitické aplikace.

Aplikace založené na MVC obsahují:

  • Odels: Třídy, které představují data aplikace. Třídy modelu používají logiku ověřování k vynucení obchodních pravidel pro tato data. Objekty modelu obvykle načítají a ukládají stav modelu do databáze. V tomto kurzu Movie model načítá filmová data z databáze, poskytuje je do zobrazení nebo aktualizuje. Aktualizovaná data se zapisují do databáze.
  • Výhledy: Výhledy jsou komponenty, které zobrazují uživatelské rozhraní aplikace. Obecně platí, že toto uživatelské rozhraní zobrazuje data modelu.
  • Controllers: Třídy, které:
    • Zpracování požadavků v prohlížeči
    • Načtení dat modelu
    • Šablony zobrazení volání, které vracejí odpověď

V aplikaci MVC se v zobrazení zobrazují jenom informace. Kontroler zpracovává uživatelské vstupy a interakce a reaguje na ně. Kontroler například zpracovává segmenty adres URL a hodnoty řetězce dotazu a předává tyto hodnoty do modelu. Model může tyto hodnoty použít k dotazování databáze. Příklad:

  • https://localhost:5001/Home/Privacy: určuje Home kontroler a Privacy akci.
  • https://localhost:5001/Movies/Edit/5: je žádost o úpravu videa s ID=5 pomocí Movies kontroleru a Edit akce, které jsou podrobně popsány dále v kurzu.

Data směrování jsou vysvětlena později v kurzu.

Model architektury MVC odděluje aplikaci do tří hlavních skupin komponent: Modely, zobrazení a kontrolery. Tento model pomáhá dosáhnout oddělení obav: Logika uživatelského rozhraní patří do zobrazení. Vstupní logika patří do kontroleru. Obchodní logika patří do modelu. Toto oddělení pomáhá při sestavování aplikace spravovat složitost, protože umožňuje pracovat na jednom aspektu implementace najednou, aniž by to mělo vliv na kód jiného. Například můžete pracovat na kódu zobrazení bez závislosti na kódu obchodní logiky.

Tyto koncepty jsou představeny a demonstrována v této sérii kurzů při vytváření filmové aplikace. Projekt MVC obsahuje složky pro kontrolery a zobrazení.

Přidání kontroleru

V Průzkumníku řešení klikněte pravým tlačítkem myši na Kontrolery >, poté vyberte možnost Přidat > Kontroler.

Průzkumník řešení, Klikněte pravým tlačítkem myši na Kontrolery> Přidat > Řadič

V dialogovém okně Přidat novou vygenerovanou položku vyberte kontroler MVC – Prázdný>Přidat.

Přidání kontroleru MVC

V dialogovém okně Přidat novou položku – MvcMovie zadejte HelloWorldController.cs a vyberte Přidat.

Controllers/HelloWorldController.cs Obsah nahraďte následujícím kódem:

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...";
    }
}

Každá public metoda v kontroleru je voláná jako koncový bod HTTP. V ukázce výše vrátí obě metody řetězec. Všimněte si komentářů předcházejících každé metodě.

Koncový bod HTTP:

  • Je cílová adresa URL ve webové aplikaci, například https://localhost:5001/HelloWorld.
  • Kombinuje:
    • Použitý protokol: HTTPS.
    • Síťové umístění webového serveru, včetně portu TCP: localhost:5001.
    • Cílový identifikátor URI: HelloWorld.

První komentář uvádí, že se jedná o metodu HTTP GET , která se vyvolá připojením /HelloWorld/ k základní adrese URL.

Druhý komentář určuje metodu HTTP GET , která se vyvolá připojením /HelloWorld/Welcome/ k adrese URL. Později v tomto kurzu se generátor scaffoldingu používá ke generování HTTP POST metod, které aktualizují data.

Spusťte aplikaci bez ladicího programu stisknutím klávesy Ctrl+F5.

Připojte /HelloWorld k cestě v adresním řádku. Metoda Index vrátí řetězec.

Okno prohlížeče s odpovědí aplikace na tuto výchozí akci

MVC vyvolá třídy kontroleru a metody akcí v nich v závislosti na příchozí adrese URL. Výchozí logika směrování adres URL používaná MVC používá formát, který určuje, jaký kód se má vyvolat:

/[Controller]/[ActionName]/[Parameters]

Formát směrování je v Program.cs souboru nastavený.

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

Když přejdete do aplikace a nezadáte žádné segmenty adresy URL, použije se výchozí kontroler "Home" a metoda Index zadaná ve výše uvedeném řádku šablony. V předchozích částech adresy URL:

  • První segment adresy URL určuje třídu kontroleru, která se má spustit. Proto localhost:5001/HelloWorld se mapuje na třídu HelloWorld Controller.
  • Druhá část segmentu adresy URL určuje metodu akce pro třídu. Proto localhost:5001/HelloWorld/Index způsobí spuštění Index metody HelloWorldController třídy. Všimněte si, že stačilo procházet na localhost:5001/HelloWorld a metoda Index se volala ve výchozím nastavení. Index je výchozí metoda, která bude volána na kontroleru, pokud není explicitně zadán název metody.
  • Třetí část segmentu adresy URL ( id) je určená pro směrovací data. Směrovací data jsou vysvětlena později v tutoriálu.

Přejděte na: https://localhost:{PORT}/HelloWorld/Welcome. Nahraďte {PORT} číslem portu.

Metoda Welcome se spustí a vrátí řetězec This is the Welcome action method.... Pro tuto adresu URL je HelloWorld kontroler a Welcome je to metoda akce. Zatím jste nepoužili [Parameters] část adresy URL.

Okno prohlížeče s odpovědí aplikace Toto je akční metoda Welcome

Upravte kód tak, aby předával některé informace o parametrech z adresy URL kontroleru. Například /HelloWorld/Welcome?name=Rick&numtimes=4.

Změňte metodu Welcome tak, aby zahrnovala dva parametry, jak je znázorněno v následujícím kódu.

// 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}");
}

Předchozí kód:

  • Použije funkci volitelného parametru jazyka C# k označení, že numTimes parametr má výchozí hodnotu 1, pokud pro tento parametr není předána žádná hodnota.
  • Slouží HtmlEncoder.Default.Encode k ochraně aplikace před škodlivým vstupem, například prostřednictvím JavaScriptu.
  • Používá interpolované řetězce v $"Hello {name}, NumTimes is: {numTimes}".

Spusťte aplikaci a přejděte na: https://localhost:{PORT}/HelloWorld/Welcome?name=Rick&numtimes=4. Nahraďte {PORT} číslem portu.

Vyzkoušejte jiné hodnoty pro name a numtimes v adrese URL. Systém vazeb modelu MVC automaticky mapuje pojmenované parametry z řetězce dotazu na parametry v metodě. Další informace najdete v tématu Vazby modelu.

Okno prohlížeče s odpovědí aplikace Hello Rick, NumTimes je: 4

Na předchozím obrázku:

  • Segment Parameters adresy URL se nepoužívá.
  • Parametry name a numTimes se předávají v řetězci dotazu.
  • ( ? Otazník) ve výše uvedené adrese URL je oddělovač a řetězec dotazu následuje.
  • Znak & odděluje páry hodnot pole.

Nahraďte metodu Welcome následujícím kódem:

public string Welcome(string name, int ID = 1)
{
    return HtmlEncoder.Default.Encode($"Hello {name}, ID: {ID}");
}

Spusťte aplikaci a zadejte následující adresu URL: https://localhost:{PORT}/HelloWorld/Welcome/3?name=Rick

V předchozí adrese URL:

  • Třetí segment adresy URL odpovídal parametru idtrasy .
  • Tato Welcome metoda obsahuje parametr id , který odpovídá šabloně adresy URL v MapControllerRoute metodě.
  • ? Koncový řetězec dotazu spustí.
app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

V předchozím příkladu:

  • Třetí segment adresy URL odpovídal parametru idtrasy .
  • Tato Welcome metoda obsahuje parametr id , který odpovídá šabloně adresy URL v MapControllerRoute metodě.
  • Koncová ? hodnota (v id?) označuje, že id parametr je volitelný.

Architektonický vzor Model-View-Controller (MVC) rozděluje aplikaci do tří hlavních komponent: Model, View a Controller. Model MVC pomáhá vytvářet aplikace, které jsou testovatelné a snadněji se aktualizují než tradiční monolitické aplikace.

Aplikace založené na MVC obsahují:

  • Modely: Třídy, které představují data aplikace. Třídy modelu používají logiku ověřování k vynucení obchodních pravidel pro tato data. Objekty modelu obvykle načítají a ukládají stav modelu do databáze. V tomto kurzu model Movie načítá filmová data z databáze, poskytuje je k zobrazení nebo je aktualizuje. Aktualizovaná data se zapisují do databáze.
  • Zobrazení: Zobrazení jsou komponenty, které zobrazují uživatelské rozhraní aplikace. Obecně platí, že toto uživatelské rozhraní zobrazuje data modelu.
  • Controllers: Třídy, které:
    • Zpracování požadavků v prohlížeči
    • Načtení dat modelu
    • Šablony zobrazení volání, které vracejí odpověď

V aplikaci MVC se v zobrazení zobrazují jenom informace. Kontroler zpracovává uživatelské vstupy a interakce a reaguje na ně. Kontroler například zpracovává segmenty adres URL a hodnoty řetězce dotazu a předává tyto hodnoty do modelu. Model může tyto hodnoty použít k dotazování databáze. Příklad:

  • https://localhost:5001/Home/Privacy: určuje Home kontroler a Privacy akci.
  • https://localhost:5001/Movies/Edit/5: je žádost o úpravu videa s ID=5 pomocí Movies kontroleru a Edit akce, které jsou podrobně popsány dále v kurzu.

Data směrování jsou vysvětlena později v kurzu.

Model architektury MVC odděluje aplikaci do tří hlavních skupin komponent: Modely, zobrazení a kontrolery. Tento model pomáhá dosáhnout oddělení obav: Logika uživatelského rozhraní patří do zobrazení. Vstupní logika patří do kontroleru. Obchodní logika patří do modelu. Toto oddělení pomáhá při sestavování aplikace spravovat složitost, protože umožňuje pracovat na jednom aspektu implementace najednou, aniž by to mělo vliv na kód jiného. Například můžete pracovat na kódu zobrazení bez závislosti na kódu obchodní logiky.

Tyto koncepty jsou představeny a demonstrována v této sérii kurzů při vytváření filmové aplikace. Projekt MVC obsahuje složky pro kontrolery a zobrazení.

Přidání kontroleru

V Průzkumníku řešení klepněte pravým tlačítkem myši na Kontrolery > Přidat > Kontroler.

Průzkumník řešení, klikněte pravým tlačítkem myši na Řadiče> přidat > Řadič

V dialogovém okně Přidat novou vygenerovanou položku vyberte Kontroler MVC – Prázdný>Přidat.

Přidání kontroleru MVC

V dialogovém okně Přidat novou položku – MvcMovie zadejte HelloWorldController.cs a vyberte Přidat.

Controllers/HelloWorldController.cs Obsah nahraďte následujícím kódem:

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...";
    }
}

Každá public metoda v kontroleru je voláná jako koncový bod HTTP. V ukázce výše vrátí obě metody řetězec. Všimněte si komentářů předcházejících každé metodě.

Koncový bod HTTP:

  • Je cílová adresa URL ve webové aplikaci, například https://localhost:5001/HelloWorld.
  • Kombinuje:
    • Použitý protokol: HTTPS.
    • Síťové umístění webového serveru, včetně portu TCP: localhost:5001.
    • Cílový identifikátor URI: HelloWorld.

První komentář uvádí, že se jedná o metodu HTTP GET , která se vyvolá připojením /HelloWorld/ k základní adrese URL.

Druhý komentář určuje metodu HTTP GET , která se vyvolá připojením /HelloWorld/Welcome/ k adrese URL. Později v tomto kurzu se engine pro generování šablon používá ke generování HTTP POST metod, které aktualizují data.

Spusťte aplikaci bez ladicího programu stisknutím klávesy Ctrl+F5.

Přidejte /HelloWorld do cesty v adresním řádku. Metoda Index vrátí řetězec.

Okno prohlížeče s odpovědí aplikace na tuto výchozí akci

MVC vyvolá třídy kontroleru a metody akcí v nich v závislosti na příchozí adrese URL. Výchozí logika směrování adres URL používaná MVC používá formát, který určuje, jaký kód se má vyvolat:

/[Controller]/[ActionName]/[Parameters]

Formát směrování je v Program.cs souboru nastavený.

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

Když přejdete do aplikace a nezadáte žádné segmenty adresy URL, použije se výchozí kontroler "Home" a metoda Index zadaná ve výše uvedeném řádku šablony. V předchozích segmentech adresy URL:

  • První segment adresy URL určuje třídu kontroleru, která se má spustit. Proto localhost:5001/HelloWorld se mapuje na třídu HelloWorld Controller.
  • Druhá část segmentu adresy URL určuje metodu akce pro třídu. Proto localhost:5001/HelloWorld/Index způsobí spuštění Index metody HelloWorldController třídy. Všimněte si, že jste jen museli přejít na localhost:5001/HelloWorld, a metoda Index se volala ve výchozím nastavení. Index je výchozí metoda, která bude volána na kontroleru, pokud není explicitně zadán název metody.
  • Třetí část segmentu adresy URL ( id) je určená pro směrovací data. Údaje o trasování jsou vysvětleny později ve výukovém materiálu.

Přejděte na: https://localhost:{PORT}/HelloWorld/Welcome. Nahraďte {PORT} číslem portu.

Metoda Welcome se spustí a vrátí řetězec This is the Welcome action method.... Pro tuto adresu URL je HelloWorld kontroler a Welcome je to metoda akce. Zatím jste nepoužili [Parameters] část adresy URL.

Okno prohlížeče zobrazující odpověď aplikace: Toto je metoda akce Vítá vás

Upravte kód tak, aby předával některé informace o parametrech z adresy URL kontroleru. Například /HelloWorld/Welcome?name=Rick&numtimes=4.

Změňte metodu Welcome tak, aby zahrnovala dva parametry, jak je znázorněno v následujícím kódu.

// 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}");
}

Předchozí kód:

  • Použije funkci volitelného parametru jazyka C# k označení, že numTimes parametr má výchozí hodnotu 1, pokud pro tento parametr není předána žádná hodnota.
  • Slouží HtmlEncoder.Default.Encode k ochraně aplikace před škodlivým vstupem, například prostřednictvím JavaScriptu.
  • Používá interpolované řetězce v $"Hello {name}, NumTimes is: {numTimes}".

Spusťte aplikaci a přejděte na: https://localhost:{PORT}/HelloWorld/Welcome?name=Rick&numtimes=4. Nahraďte {PORT} číslem portu.

Vyzkoušejte jiné hodnoty pro name a numtimes v adrese URL. Systém vazeb modelu MVC automaticky mapuje pojmenované parametry z řetězce dotazu na parametry v metodě. Další informace najdete v Model Binding.

Okno prohlížeče s odpovědí aplikace Hello Rick, NumTimes je: 4

Na předchozím obrázku:

  • Segment Parameters adresy URL se nepoužívá.
  • Parametry name a numTimes se předávají v řetězci dotazu.
  • ( ? Otazník) ve výše uvedené adrese URL je oddělovač a řetězec dotazu následuje.
  • Znak & odděluje páry hodnot pole.

Nahraďte metodu Welcome následujícím kódem:

public string Welcome(string name, int ID = 1)
{
    return HtmlEncoder.Default.Encode($"Hello {name}, ID: {ID}");
}

Spusťte aplikaci a zadejte následující adresu URL: https://localhost:{PORT}/HelloWorld/Welcome/3?name=Rick

V předchozí adrese URL:

  • Třetí segment adresy URL odpovídal parametru idtrasy .
  • Tato Welcome metoda obsahuje parametr id , který odpovídá šabloně adresy URL v MapControllerRoute metodě.
  • ? Zahajuje řetězec dotazu.
app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

V předchozím příkladu:

  • Třetí segment adresy URL odpovídal parametru idtrasy .
  • Tato Welcome metoda obsahuje parametr id , který odpovídá šabloně adresy URL v MapControllerRoute metodě.
  • Koncová ? hodnota (v id?) označuje, že id parametr je volitelný.

Architektonický vzor Model-View-Controller (MVC) rozděluje aplikaci do tří hlavních komponent: Model, View a Controller. Model MVC pomáhá vytvářet aplikace, které jsou testovatelné a snadněji se aktualizují než tradiční monolitické aplikace.

Aplikace založené na MVC obsahují:

  • Modely: Třídy, které představují data aplikace. Třídy modelu používají logiku ověřování k vynucení obchodních pravidel pro tato data. Objekty modelu obvykle načítají a ukládají stav modelu do databáze. V tomto kurzu Movie model načítá filmová data z databáze, poskytuje je pro zobrazení nebo je aktualizuje. Aktualizovaná data se zapisují do databáze.
  • Pohledy: Pohledy jsou komponenty, které zobrazují uživatelské rozhraní aplikace. Obecně platí, že toto uživatelské rozhraní zobrazuje data modelu.
  • Controllers: Třídy, které:
    • Zpracování požadavků v prohlížeči
    • Načtení dat modelu
    • Šablony zobrazení volání, které vracejí odpověď

V aplikaci MVC se v zobrazení zobrazují jenom informace. Kontroler zpracovává uživatelské vstupy a interakce a reaguje na ně. Kontroler například zpracovává segmenty adres URL a hodnoty řetězce dotazu a předává tyto hodnoty do modelu. Model může tyto hodnoty použít k dotazování databáze. Příklad:

  • https://localhost:5001/Home/Privacy: určuje Home kontroler a Privacy akci.
  • https://localhost:5001/Movies/Edit/5: je žádost o úpravu videa s ID=5 pomocí Movies kontroleru a Edit akce, které jsou podrobně popsány dále v kurzu.

Data o trasách jsou vysvětlena později v kurzu.

Model architektury MVC odděluje aplikaci do tří hlavních skupin komponent: Modely, zobrazení a kontrolery. Tento model pomáhá dosáhnout oddělení obav: Logika uživatelského rozhraní patří do zobrazení. Vstupní logika patří do kontroleru. Obchodní logika patří do modelu. Toto oddělení pomáhá při sestavování aplikace spravovat složitost, protože umožňuje pracovat na jednom aspektu implementace najednou, aniž by to mělo vliv na kód jiného. Například můžete pracovat na kódu zobrazení bez závislosti na kódu obchodní logiky.

Tyto koncepty jsou představeny a demonstrována v této sérii kurzů při vytváření filmové aplikace. Projekt MVC obsahuje složky pro kontrolery a zobrazení.

Přidání kontroleru

V Průzkumníku řešení klikněte pravým tlačítkem myši na Řadiče > Přidat > Řadič.

Průzkumník řešení, klikněte pravým tlačítkem myši na Řadiče> Přidat> Řadič

V dialogovém okně Přidat novou vygenerovanou položku vyberte kontroler MVC – Prázdný>Přidat.

Přidání kontroleru MVC

V dialogovém okně Přidat novou položku – MvcMovie zadejte HelloWorldController.cs a vyberte Přidat.

Controllers/HelloWorldController.cs Obsah nahraďte následujícím kódem:

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...";
        }
    }
}

Každá public metoda v kontroleru je voláná jako koncový bod HTTP. V ukázce výše vrátí obě metody řetězec. Všimněte si komentářů předcházejících každé metodě.

Koncový bod HTTP:

  • Je cílová adresa URL ve webové aplikaci, například https://localhost:5001/HelloWorld.
  • Kombinuje:
    • Použitý protokol: HTTPS.
    • Síťové umístění webového serveru, včetně portu TCP: localhost:5001.
    • Cílový identifikátor URI: HelloWorld.

První komentář uvádí, že se jedná o metodu HTTP GET , která se vyvolá připojením /HelloWorld/ k základní adrese URL.

Druhý komentář určuje metodu HTTP GET , která se vyvolá připojením /HelloWorld/Welcome/ k adrese URL. Později v tomto kurzu se modul generování uživatelského rozhraní používá ke generování HTTP POST metod, které aktualizují data.

Spusťte aplikaci bez ladění.

Připojte "HelloWorld" k cestě na panelu adresy. Metoda Index vrátí řetězec.

Okno prohlížeče s odpovědí aplikace na tuto výchozí akci

MVC vyvolá třídy kontroleru a metody akcí v nich v závislosti na příchozí adrese URL. Výchozí logika směrování adres URL používaná MVC používá formát, který určuje, jaký kód se má vyvolat:

/[Controller]/[ActionName]/[Parameters]

Formát směrování je v Program.cs souboru nastavený.

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

Když přejdete do aplikace a nezadáte žádné segmenty adresy URL, použije se výchozí kontroler "Home" a metoda Index zadaná ve výše uvedeném řádku šablony. V předchozích segmentech adresy URL:

  • První segment adresy URL určuje třídu kontroleru, která se má spustit. Proto localhost:5001/HelloWorld se mapuje na třídu HelloWorld Controller.
  • Druhá část segmentu adresy URL určuje metodu akce pro třídu. Proto localhost:5001/HelloWorld/Index způsobí spuštění Index metody HelloWorldController třídy. Všimněte si, že jste pouze museli přejít na localhost:5001/HelloWorld a metoda Index se volala ve výchozím nastavení. Index je výchozí metoda, která bude volána na kontroleru, pokud není explicitně zadán název metody.
  • Třetí část segmentu adresy URL ( id) je určená pro směrovací data. Údaje o trase budou vysvětleny později v kurzu.

Přejděte na: https://localhost:{PORT}/HelloWorld/Welcome. Nahraďte {PORT} číslem portu.

Metoda Welcome se spustí a vrátí řetězec This is the Welcome action method.... Pro tuto adresu URL je HelloWorld kontroler a Welcome je to metoda akce. Zatím jste nepoužili [Parameters] část adresy URL.

Okno prohlížeče, ve kterém se zobrazuje odpověď aplikace Toto je akční metoda Welcome

Upravte kód tak, aby předával některé informace o parametrech z adresy URL kontroleru. Například /HelloWorld/Welcome?name=Rick&numtimes=4.

Změňte metodu Welcome tak, aby zahrnovala dva parametry, jak je znázorněno v následujícím kódu.

// 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}");
}

Předchozí kód:

  • Použije funkci volitelného parametru jazyka C# k označení, že numTimes parametr má výchozí hodnotu 1, pokud pro tento parametr není předána žádná hodnota.
  • Slouží HtmlEncoder.Default.Encode k ochraně aplikace před škodlivým vstupem, například prostřednictvím JavaScriptu.
  • Používá interpolované řetězce v $"Hello {name}, NumTimes is: {numTimes}".

Spusťte aplikaci a přejděte na: https://localhost:{PORT}/HelloWorld/Welcome?name=Rick&numtimes=4. Nahraďte {PORT} číslem portu.

Vyzkoušejte jiné hodnoty pro name a numtimes v adrese URL. Systém vazeb modelu MVC automaticky mapuje pojmenované parametry z řetězce dotazu na parametry v metodě. Další informace naleznete v části Vazba modelu.

Okno prohlížeče s odpovědí aplikace Hello Rick, NumTimes je: 4

Na předchozím obrázku:

  • Segment Parameters adresy URL se nepoužívá.
  • Parametry name a numTimes se předávají v řetězci dotazu.
  • ( ? Otazník) ve výše uvedené adrese URL je oddělovač a řetězec dotazu následuje.
  • Znak & odděluje páry hodnot pole.

Nahraďte metodu Welcome následujícím kódem:

public string Welcome(string name, int ID = 1)
{
    return HtmlEncoder.Default.Encode($"Hello {name}, ID: {ID}");
}

Spusťte aplikaci a zadejte následující adresu URL: https://localhost:{PORT}/HelloWorld/Welcome/3?name=Rick

V předchozí adrese URL:

  • Třetí segment adresy URL odpovídal parametru idtrasy .
  • Tato Welcome metoda obsahuje parametr id , který odpovídá šabloně adresy URL v MapControllerRoute metodě.
  • ? Zahajující řetězec dotazu začíná.
app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

V předchozím příkladu:

  • Třetí segment adresy URL odpovídal parametru idtrasy .
  • Tato Welcome metoda obsahuje parametr id , který odpovídá šabloně adresy URL v MapControllerRoute metodě.
  • Koncová ? hodnota (v id?) označuje, že id parametr je volitelný.

Architektonický vzor Model-View-Controller (MVC) odděluje aplikaci do tří hlavních komponent: Model, View a Controller. Model MVC pomáhá vytvářet aplikace, které jsou testovatelné a snadněji se aktualizují než tradiční monolitické aplikace.

Aplikace založené na MVC obsahují:

  • Models: Třídy, které zastupují data aplikace. Třídy modelu používají logiku ověřování k vynucení obchodních pravidel pro tato data. Objekty modelu obvykle načítají a ukládají stav modelu do databáze. V tomto kurzu Movie model získává filmová data z databáze, poskytuje je pro zobrazení nebo je aktualizuje. Aktualizovaná data se zapisují do databáze.
  • Views: Pohledy jsou komponenty, které zobrazují uživatelské rozhraní aplikace. Obecně platí, že toto uživatelské rozhraní zobrazuje data modelu.
  • Controllers: Třídy, které:
    • Zpracování požadavků v prohlížeči
    • Načtení dat modelu
    • Šablony zobrazení volání, které vracejí odpověď

V aplikaci MVC se v zobrazení zobrazují jenom informace. Kontroler zpracovává uživatelské vstupy a interakce a reaguje na ně. Kontroler například zpracovává segmenty adres URL a hodnoty řetězce dotazu a předává tyto hodnoty do modelu. Model může tyto hodnoty použít k dotazování databáze. Příklad:

  • https://localhost:5001/Home/Privacy: určuje Home kontroler a Privacy akci.
  • https://localhost:5001/Movies/Edit/5: je žádost o úpravu videa s ID=5 pomocí Movies kontroleru a Edit akce, které jsou podrobně popsány dále v kurzu.

Směrovací data jsou vysvětlena později v tutoriálu.

Model architektury MVC odděluje aplikaci do tří hlavních skupin komponent: Modely, zobrazení a kontrolery. Tento model pomáhá dosáhnout oddělení obav: Logika uživatelského rozhraní patří do zobrazení. Vstupní logika patří do kontroleru. Obchodní logika patří do modelu. Toto oddělení pomáhá při sestavování aplikace spravovat složitost, protože umožňuje pracovat na jednom aspektu implementace najednou, aniž by to mělo vliv na kód jiného. Například můžete pracovat na kódu zobrazení bez závislosti na kódu obchodní logiky.

Tyto koncepty jsou představeny a demonstrována v této sérii kurzů při vytváření filmové aplikace. Projekt MVC obsahuje složky pro kontrolery a zobrazení.

Přidání kontroleru

V Průzkumníku řešení klikněte pravým tlačítkem na Kontrolery > Přidat > Kontroler.

Průzkumník řešení klikněte pravým tlačítkem myši na Kontrolery>. Přidat > kontroler

V dialogovém okně Přidat generování uživatelského rozhraní vyberte kontroler MVC – prázdný.

Přidejte kontroler MVC a pojmenujte ho.

V dialogovém okně Přidat novou položku – MvcMovie zadejte HelloWorldController.cs a vyberte Přidat.

Controllers/HelloWorldController.cs Obsah nahraďte následujícím kódem:

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...";
        }
    }
}

Každá public metoda v kontroleru je voláná jako koncový bod HTTP. V ukázce výše vrátí obě metody řetězec. Všimněte si komentářů předcházejících každé metodě.

Koncový bod HTTP:

  • Je cílová adresa URL ve webové aplikaci, například https://localhost:5001/HelloWorld.
  • Kombinuje:
    • Použitý protokol: HTTPS.
    • Síťové umístění webového serveru, včetně portu TCP: localhost:5001.
    • Cílový identifikátor URI: HelloWorld.

První komentář uvádí, že se jedná o metodu HTTP GET , která se vyvolá připojením /HelloWorld/ k základní adrese URL.

Druhý komentář určuje metodu HTTP GET , která se vyvolá připojením /HelloWorld/Welcome/ k adrese URL. Později v tomto tutoriálu se nástroj pro generování struktury používá ke generování HTTP POST metod, které aktualizují data.

Spusťte aplikaci bez ladicího programu.

Připojte "HelloWorld" k cestě na panelu Adresa. Metoda Index vrátí řetězec.

Okno prohlížeče s odpovědí aplikace na tuto výchozí akci

MVC vyvolá třídy kontroleru a metody akcí v nich v závislosti na příchozí adrese URL. Výchozí logika směrování adres URL používaná MVC používá formát, který určuje, jaký kód se má vyvolat:

/[Controller]/[ActionName]/[Parameters]

Formát směrování je nastaven v Configure metodě v Startup.cs souboru.

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
});

Když přejdete do aplikace a nezadáte žádné segmenty adresy URL, použije se výchozí kontroler "Home" a metoda Index zadaná ve výše uvedeném řádku šablony. V předchozích segmentech adresy URL:

  • První segment adresy URL určuje třídu kontroleru, která se má spustit. Proto localhost:5001/HelloWorld se mapuje na třídu HelloWorldController.
  • Druhá část segmentu adresy URL určuje metodu akce pro třídu. Proto localhost:5001/HelloWorld/Index způsobí spuštění Index metody HelloWorldController třídy. Všimněte si, že jste pouze museli procházet localhost:5001/HelloWorld a ve výchozím nastavení se volala metoda Index. Index je výchozí metoda, která bude volána na kontroleru, pokud není explicitně zadán název metody.
  • Třetí část segmentu adresy URL ( id) je určená pro směrovací data. Údaje o trasách jsou vysvětleny později v tutoriálu.

Přejděte na: https://localhost:{PORT}/HelloWorld/Welcome. Nahraďte {PORT} číslem portu.

Metoda Welcome se spustí a vrátí řetězec This is the Welcome action method.... Pro tuto adresu URL je HelloWorld kontroler a Welcome je to metoda akce. Zatím jste nepoužili [Parameters] část adresy URL.

Okno prohlížeče zobrazující odpověď aplikace: Tohle je metoda akce Vítána

Upravte kód tak, aby předával některé informace o parametrech z adresy URL kontroleru. Například /HelloWorld/Welcome?name=Rick&numtimes=4.

Změňte metodu Welcome tak, aby zahrnovala dva parametry, jak je znázorněno v následujícím kódu.

// 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}");
}

Předchozí kód:

  • Použije funkci volitelného parametru jazyka C# k označení, že numTimes parametr má výchozí hodnotu 1, pokud pro tento parametr není předána žádná hodnota.
  • Slouží HtmlEncoder.Default.Encode k ochraně aplikace před škodlivým vstupem, například prostřednictvím JavaScriptu.
  • Používá interpolované řetězce v $"Hello {name}, NumTimes is: {numTimes}".

Spusťte aplikaci a přejděte na: https://localhost:{PORT}/HelloWorld/Welcome?name=Rick&numtimes=4. Nahraďte {PORT} číslem portu.

Vyzkoušejte jiné hodnoty pro name a numtimes v adrese URL. Systém vazeb modelu MVC automaticky mapuje pojmenované parametry z řetězce dotazu na parametry v metodě. Podívejte se na Model Binding pro více informací.

Okno prohlížeče s odpovědí aplikace Hello Rick, NumTimes je: 4

Na předchozím obrázku:

  • Segment Parameters adresy URL se nepoužívá.
  • Parametry name a numTimes se předávají v řetězci dotazu.
  • ( ? Otazník) ve výše uvedené adrese URL je oddělovač a řetězec dotazu následuje.
  • Znak & odděluje páry hodnot pole.

Nahraďte metodu Welcome následujícím kódem:

public string Welcome(string name, int ID = 1)
{
    return HtmlEncoder.Default.Encode($"Hello {name}, ID: {ID}");
}

Spusťte aplikaci a zadejte následující adresu URL: https://localhost:{PORT}/HelloWorld/Welcome/3?name=Rick

V předchozí adrese URL:

  • Třetí segment adresy URL odpovídal parametru idtrasy .
  • Tato Welcome metoda obsahuje parametr id , který odpovídá šabloně adresy URL v MapControllerRoute metodě.
  • ? Koncový řetězec dotazu spustí.
app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
});

V předchozím příkladu:

  • Třetí segment adresy URL odpovídal parametru idtrasy .
  • Tato Welcome metoda obsahuje parametr id , který odpovídá šabloně adresy URL v MapControllerRoute metodě.
  • Koncová ? hodnota (v id?) označuje, že id parametr je volitelný.