Přehled ASP.NET Core MVC
Od Steve Smith
ASP.NET Core MVC je bohatá rozhraní pro vytváření webových aplikací a rozhraní API pomocí vzoru návrhu Model-View-Controller.
Model MVC
Model architektury MVC (Model-View-Controller) odděluje aplikaci do tří hlavních skupin komponent: modely, zobrazení a kontrolery. Tento model pomáhá dosáhnout oddělení obav. Pomocí tohoto modelu se požadavky uživatelů směruje do kontroleru, který zodpovídá za práci s modelem za provádění uživatelských akcí nebo načítání výsledků dotazů. Kontroler zvolí zobrazení, které se zobrazí uživateli, a poskytne uživateli data modelu, která vyžaduje.
Následující diagram znázorňuje tři hlavní komponenty a ty, které odkazují na ostatní:

Toto rozdělení odpovědnosti vám pomůže škálovat aplikaci z hlediska složitosti, protože je jednodušší kódovat, ladit a testovat něco (model, zobrazení nebo kontroler), které má jednu úlohu. Aktualizace, testování a ladění kódu, který má závislosti rozprostřené ve dvou nebo více z těchto tří oblastí, je obtížnější. Například logika uživatelského rozhraní se obvykle mění častěji než obchodní logika. Pokud se prezentační kód a obchodní logika zkombinují do jednoho objektu, musí se při každé změně uživatelského rozhraní upravit objekt obsahující obchodní logiku. To často přináší chyby a po každé minimální změně uživatelského rozhraní vyžaduje opětovné otestování obchodní logiky.
Poznámka
Zobrazení i kontroler závisí na modelu. Model ale nezávisí na zobrazení ani kontroleru. Toto je jedna z klíčových výhod oddělení. Toto oddělení umožňuje, aby byl model sestaven a otestován nezávisle na vizuální prezentaci.
Odpovědnosti modelu
Model v aplikaci MVC představuje stav aplikace a všechny obchodní logiky nebo operace, které by měla provádět. Obchodní logika by měla být zapouzdřena v modelu spolu s implementační logikou pro zachování stavu aplikace. Zobrazení silného typu obvykle používají typy ViewModel navržené tak, aby obsahovaly data, která se mají v tomto zobrazení zobrazit. Kontroler vytvoří a naplní tyto instance modelu ViewModel z modelu.
Zobrazení zodpovědností
Zobrazení zodpovídají za prezentace obsahu prostřednictvím uživatelského rozhraní. K vložení Razor kódu .NET do kódu HTML používají modul zobrazení. V rámci zobrazení by měla být minimální logika a jakákoli logika v nich by měla souviset s prezentacem obsahu. Pokud zjistíte, že k zobrazení dat ze složitého modelu potřebujete provádět velkou část logiky při zobrazování souborů, zvažte použití šablony Zobrazení komponenty,modelu ViewModel nebo zobrazení, abyste zobrazení zjednodušili.
Odpovědnosti správce
Kontrolery jsou komponenty, které pracují s uživatelem, pracují s modelem a nakonec vyberou zobrazení, které se má vykreslit. V aplikaci MVC se v zobrazení zobrazují jenom informace. Kontroler zpracovává uživatelský vstup a interakci a reaguje na ně. Ve vzoru MVC je kontroler počátečním vstupním bodem a zodpovídá za výběr typů modelu, se kterým se má pracovat a se kterým zobrazením se má vykreslit (a proto jeho název – řídí, jak aplikace reaguje na daný požadavek).
Poznámka
Kontrolery by neměly být příliš komplikované příliš mnoha zodpovědnostmi. Aby se logika kontroleru nesníčila příliš složitě, tlačte obchodní logiku z kontroleru a do doménového modelu.
Tip
Pokud zjistíte, že akce kontroleru často provádějí stejné druhy akcí, přesuňte tyto běžné akce do filtrů.
ASP.NET Core MVC
Rozhraní ASP.NET Core MVC je jednoduché, open source a vysoce testovatelné prezentační rozhraní optimalizované pro použití s ASP.NET Core.
ASP.NET Core MVC nabízí způsob, jak vytvářet dynamické weby založené na vzorech, které umožňují čisté oddělení obav. Poskytuje úplnou kontrolu nad značkami, podporuje vývoj přívětivý pro TDD a používá nejnovější webové standardy.
Směrování
ASP.NET Core MVC je postavené na směrování ASP.NET Core, výkonné součásti pro mapování adres URL, která umožňuje vytvářet aplikace, které mají srozumitelné a prohledáovatelné adresy URL. To vám umožní definovat vzory pojmenování adres URL vaší aplikace, které dobře fungují pro optimalizaci vyhledávacích webů (SEO) a pro generování odkazů, bez ohledu na to, jak jsou soubory na webovém serveru uspořádány. Trasy můžete definovat pomocí vhodné syntaxe šablony trasy, která podporuje omezení hodnot tras, výchozí hodnoty a volitelné hodnoty.
Směrování na základě konvence umožňuje globálně definovat formáty adres URL, které vaše aplikace přijímá, a způsob, jakým se každý z těchto formátů mapuje na konkrétní metodu akce na daném kontroleru. Při přijetí příchozího požadavku modul směrování parsuje adresu URL a porovná ji s jedním z definovaných formátů adresy URL a potom zavolá metodu akce přidruženého kontroleru.
routes.MapRoute(name: "Default", template: "{controller=Home}/{action=Index}/{id?}");
Směrování atributů umožňuje určit informace o směrování tím, že kontrolery a akce zovládá pomocí atributů, které definují trasy vaší aplikace. To znamená, že definice tras se umístí vedle kontroleru a akce, ke které jsou přidružené.
[Route("api/[controller]")]
public class ProductsController : Controller
{
[HttpGet("{id}")]
public IActionResult GetProduct(int id)
{
...
}
}
Vazby modelu
ASP.NET Core Vazba modelu MVC převádí data požadavku klienta (hodnoty formuláře, data směrování, parametry řetězce dotazu, hlavičky PROTOKOLU HTTP) na objekty, které může kontroler zpracovat. V důsledku toho logika kontroleru nemusí dělat práci při zjišťování příchozích dat požadavků. Jednoduše má data jako parametry metod akcí.
public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null) { ... }
Ověření modelu
ASP.NET Core MVC podporuje ověřování tím, že objekt modelu potvrzuje atributy ověřování datových poznámek. Atributy ověřování jsou zkontrolovány na straně klienta před tím, než se hodnoty předá na server i na server před voláním akce kontroleru.
using System.ComponentModel.DataAnnotations;
public class LoginViewModel
{
[Required]
[EmailAddress]
public string Email { get; set; }
[Required]
[DataType(DataType.Password)]
public string Password { get; set; }
[Display(Name = "Remember me?")]
public bool RememberMe { get; set; }
}
Akce kontroleru:
public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null)
{
if (ModelState.IsValid)
{
// work with the model
}
// At this point, something failed, redisplay form
return View(model);
}
Rozhraní zpracovává ověřování dat požadavků jak na klientovi, tak na serveru. Logika ověřování zadaná u typů modelů se přidá do vykreslených zobrazení jako nerušivá poznámky a vynutí se v prohlížeči pomocí ověření jQuery.
Injektáž závislostí
ASP.NET Core má integrovanou podporu injektáže závislostí (DI). V ASP.NET Core MVC mohou kontrolery žádat o potřebné služby prostřednictvím svých konstruktorů, což jim umožní postupovat podle principu explicitních závislostí.
Aplikace může také použít injektáž závislostí v souborech zobrazenípomocí @inject direktivy :
@inject SomeService ServiceName
<!DOCTYPE html>
<html lang="en">
<head>
<title>@ServiceName.GetTitle</title>
</head>
<body>
<h1>@ServiceName.GetTitle</h1>
</body>
</html>
Filtry
Filtry pomáhají vývojářům zapouzdřit křížové obavy, jako je zpracování výjimek nebo autorizace. Filtry umožňují spouštění vlastní logiky před zpracováním a po zpracování pro metody akcí a lze je nakonfigurovat tak, aby se pro daný požadavek spouštěl v určitých bodech v rámci kanálu provádění. Filtry lze použít na kontrolery nebo akce jako atributy (nebo je možné je spustit globálně). Součástí architektury je Authorize několik filtrů (například ). [Authorize] je atribut, který se používá k vytváření autorizačních filtrů MVC.
[Authorize]
public class AccountController : Controller
Oblasti
Oblasti poskytují způsob, jak rozdělit velkou ASP.NET Core webové aplikace MVC do menších funkčních seskupení. Oblast je struktura MVC uvnitř aplikace. V projektu MVC se logické komponenty jako Model, Kontroler a Zobrazení uchovávají v různých složkách a MVC používá zásady vytváření názvů k vytvoření vztahu mezi těmito komponentami. U velkých aplikací může být výhodné rozdělit aplikaci do samostatných oblastí vysoké úrovně funkčnosti. Například aplikace elektronického obchodování s více obchodními jednotkami, jako je například pokladna, fakturace a vyhledávání atd. Každá z těchto jednotek má vlastní zobrazení logických komponent, kontrolery a modely.
Webová rozhraní API
Kromě toho, že je platforma pro vytváření webů skvělá, nabízí ASP.NET Core MVC skvělou podporu pro vytváření webových rozhraní API. Můžete vytvářet služby, které osloví širokou škálu klientů, včetně prohlížečů a mobilních zařízení.
Tato rozhraní zahrnuje podporu vyjednávání obsahu HTTP s integrovanou podporou formátování dat ve formátu JSON nebo XML. Pokud chcete přidat podporu vlastních formátů, napište vlastní formátovací metody.
Pokud chcete povolit podporu pro hypermédii, použijte generování propojení. Snadno povolte podporu sdílení prostředků mezi zdroji (CORS), aby bylo možné sdílet webová rozhraní API mezi více webovými aplikacemi.
Testovatelnosti
Díky použití rozhraní a injektáže závislostí je tato rozhraní vhodná pro testování částí a tato rozhraní obsahuje funkce (jako je TestHost a InMemory pro Entity Framework), které testy integrace také urychlují a zrychlují. Přečtěte si další informace o testování logiky kontroleru.
Razor modul zobrazení
ASP.NET Core MVC používají k Razor vykreslení zobrazení modul zobrazení. Razor je kompaktní, expresivní a plynulý jazyk využívající značky šablon pro definování zobrazení pomocí vloženého kódu jazyka C#. Razor se používá k dynamickému generování webového obsahu na serveru. Kód serveru můžete čistě kombinovat s obsahem na straně klienta a kódem.
<ul>
@for (int i = 0; i < 5; i++) {
<li>List item @i</li>
}
</ul>
Pomocí modulu Razor zobrazení můžete definovat rozložení , částečná zobrazení a nahraditelné oddíly.
Zobrazení se silnými typy
Razor Zobrazení v MVC mohou být na základě modelu silného typu. Kontrolery mohou zobrazením předat model silného typu, který zobrazením umožní kontrolu typů a podporu technologie IntelliSense.
Například následující zobrazení vykreslí model typu IEnumerable<Product> :
@model IEnumerable<Product>
<ul>
@foreach (Product p in Model)
{
<li>@p.Name</li>
}
</ul>
Pomocné rutiny značek
Pomocná rozšíření značek umožňují, aby se kód na straně serveru mohl podílet na vytváření a vykreslování elementů HTML v Razor souborech. Pomocí pomocníků značek můžete definovat vlastní značky (například ) nebo upravit chování existujících <environment> značek (například <label> ). Pomocná opatření značek se vážou na konkrétní prvky na základě názvu elementu a jeho atributů. Poskytují výhody vykreslování na straně serveru při zachování prostředí pro úpravy HTML.
Pro běžné úlohy , jako je vytváření formulářů, odkazů, načítání prostředků a dalších, existuje mnoho integrovaných pomocných prvků značek, a to ještě více, a to i ve veřejných úložištích GitHub a jako NuGet balíčky. Pomocníci značek jsou vytváření v jazyce C# a cílí na elementy HTML na základě názvu elementu, názvu atributu nebo nadřazené značky. Například pomocí integrovaného třídy LinkTagHelper můžete vytvořit odkaz na Login akci AccountsController třídy :
<p>
Thank you for confirming your email.
Please <a asp-controller="Account" asp-action="Login">Click here to Log in</a>.
</p>
Lze použít k zahrnutí různých skriptů do zobrazení (například nezpracovaných nebo minifikovaných) na základě běhového prostředí, jako je vývoj, pracovní prostředí EnvironmentTagHelper nebo produkce:
<environment names="Development">
<script src="~/lib/jquery/dist/jquery.js"></script>
</environment>
<environment names="Staging,Production">
<script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-2.1.4.min.js"
asp-fallback-src="~/lib/jquery/dist/jquery.min.js"
asp-fallback-test="window.jQuery">
</script>
</environment>
Pomocníci značek poskytují vývojové prostředí vhodné pro HTML a bohaté prostředí IntelliSense pro vytváření kódu HTML a Razor značek. Většina integrovaných pomocných prvků značek cílí na existující elementy HTML a poskytuje atributy elementu na straně serveru.
Zobrazit komponenty
Komponenty zobrazení umožňují zabalit logiku vykreslování a opakovaně ji používat v celé aplikaci. Podobají se částečným zobrazením,ale s přidruženou logikou.
Kompatibilita – verze
Metoda umožňuje aplikaci vyjádřit výslovný souhlas nebo vyjádřit výslovný nesouhlas se změnami potenciálně způsobovat nehromí chování, které ASP.NET Core SetCompatibilityVersion MVC 2.1 nebo novější.
Další informace naleznete v tématu Verze kompatibility pro ASP.NET Core MVC.
Další zdroje informací
- MyTested.AspNetCore.Mvc – Fluent Testing Library for ASP.NET Core MVC:Knihovna pro testování částí silného typu, která poskytuje plynulejší rozhraní pro testování aplikací MVC a webového rozhraní API. (Společnost Microsoft neudržuje ani nepodporuje.)
- Předběžné vykreslení a integrace ASP.NET Core Razor komponent
- Injektáž závislostí v ASP.NET Core