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 najdete ve verzi .NET 8 tohoto článku.

Upozorňující

Tato verze ASP.NET Core se už nepodporuje. Další informace najdete v tématu .NET a .NET Core Zásady podpory. Aktuální verzi najdete ve verzi .NET 8 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í verzi najdete ve verzi .NET 8 tohoto článku.

Autor: Rick Anderson

Model-View-Controller (MVC) architektury 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í:

  • 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.
  • Vews: 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ík ř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 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 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 ladicího programu stisknutím kláves Ctrl+F5 (Windows) nebo ⌘+F5 (macOS).

Připojte /HelloWorld se 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 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 museli procházet localhost:5001/HelloWorld a Index metoda se ve výchozím nastavení volala. 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 s odpovědí aplikace Na tuto metodu 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 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 parametry 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ý.

Model-View-Controller (MVC) architektury 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í:

  • 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.
  • Vews: 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ík ř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 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 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 ladicího programu stisknutím kláves Ctrl+F5 (Windows) nebo ⌘+F5 (macOS).

Připojte /HelloWorld se 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 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 museli procházet localhost:5001/HelloWorld a Index metoda se ve výchozím nastavení volala. 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 s odpovědí aplikace Na tuto metodu 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 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 parametry 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ý.

Model-View-Controller (MVC) architektury 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í:

  • 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.
  • Vews: 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ík ř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 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 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 ladicího programu stisknutím kláves Ctrl+F5 (Windows) nebo ⌘+F5 (macOS).

Připojte /HelloWorld se 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 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 museli procházet localhost:5001/HelloWorld a Index metoda se ve výchozím nastavení volala. 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 s odpovědí aplikace Na tuto metodu 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 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 parametry 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ý.

Model-View-Controller (MVC) architektury 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í:

  • 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.
  • Vews: 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ík ř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 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 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 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 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 museli procházet localhost:5001/HelloWorld a Index metoda se ve výchozím nastavení volala. 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 s odpovědí aplikace Na tuto metodu 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 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 parametry 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ý.

Model-View-Controller (MVC) architektury 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í:

  • 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.
  • Vews: 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ík ř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 kurzu se modul generování uživatelského rozhraní 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 museli procházet localhost:5001/HelloWorld a Index metoda se ve výchozím nastavení volala. 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 s odpovědí aplikace Na tuto metodu 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 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 parametry 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ý.