Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Kontrolery, akce a výsledky akcí jsou základní součástí toho, jak vývojáři vytvářejí aplikace pomocí ASP.NET Core MVC.
Co je kontroler?
Kontroler slouží k definování a seskupení sady akcí. Akce (nebo metoda akce) je metoda na kontroleru, který zpracovává požadavky. Kontrolery logicky seskupí podobné akce dohromady. Tato agregace akcí umožňuje souhrnně použít společné sady pravidel, jako je směrování, ukládání do mezipaměti a autorizace. Požadavky se mapují na akce prostřednictvím směrování. Kontrolery se aktivují a likvidují na základě každého požadavku.
Podle konvence třídy kontroleru:
- Nachází se v kořenové úrovni složky Řadiče projektu.
- Dědit z
Microsoft.AspNetCore.Mvc.Controller.
Kontroler je okamžitě dostupná třída, obvykle veřejná, ve které platí alespoň jedna z následujících podmínek:
- Název třídy je příponou
Controller. - Třída dědí z třídy, jejíž název je příponou
Controller. - Atribut
[Controller]se aplikuje na třídu.
Třída kontroleru nesmí mít přidružený [NonController] atribut.
Kontrolery by měly dodržovat zásadu explicitních závislostí. Existuje několik přístupů k implementaci tohoto principu. Pokud více akcí kontroleru vyžaduje stejnou službu, zvažte použití injektáže konstruktoru k vyžádání těchto závislostí. Pokud je služba potřebná pouze pro jednu metodu akce, zvažte použití Action Injection k injektování závislosti.
V rámci vzoru Model-View-Controller zodpovídá kontrolér za počáteční zpracování požadavku a vytvoření instance modelu. Obecně platí, že obchodní rozhodnutí by se měla provádět v rámci modelu.
Kontroler převezme výsledek zpracování modelu (pokud existuje) a vrátí buď správné zobrazení a jeho přidružená data zobrazení, nebo výsledek volání rozhraní API. Další informace najdete v přehledu ASP.NET Core MVC a začínáme s ASP.NET Core MVC a sadou Visual Studio.
Kontroler je abstrakce úrovně uživatelského rozhraní. Jeho odpovědností je zajistit, aby data požadavku byla platná a zvolila, které zobrazení (nebo výsledek pro rozhraní API) se má vrátit. V dobře faktorovaných aplikacích nezahrnuje přímý přístup k datům ani obchodní logiku. Místo toho správce deleguje na služby, které tyto povinnosti zpracovávají.
Definování akcí
Veřejné metody v kontroleru s výjimkou těch, které mají [NonAction] atribut, jsou akce. Parametry akcí jsou vázané na data požadavku a ověřují se pomocí vazby modelu. K ověření modelu dochází pro vše, co je vázané na model. Hodnota ModelState.IsValid vlastnosti označuje, zda vazby modelu a ověření proběhlo úspěšně.
Metody akcí by měly obsahovat logiku pro mapování požadavku na obchodní problém. Obchodní záležitosti by se obvykle měly reprezentovat jako služby, ke kterým kontroler přistupuje prostřednictvím injektování závislostí. Akce pak namapují výsledek podnikové akce na stav aplikace.
Akce můžou vrátit cokoli, ale často vrací instanci IActionResult (nebo Task<IActionResult> pro asynchronní metody), která vytváří odpověď. Metoda akce zodpovídá za výběr typu odpovědi. Výsledek akce zajišťuje odpovídání.
Pomocné metody kontroleru
Kontrolery obvykle dědí z Controller, i když to není povinné. Odvozování z Controller poskytuje přístup ke třem kategoriím pomocných metod:
1. Metody, které vedou k prázdnému textu odpovědi
Není zahrnuta žádná Content-Type hlavička odpovědi HTTP, protože tělo odpovědi neobsahuje obsah k popisu.
V této kategorii existují dva typy výsledků: Přesměrování a Stavový kód HTTP.
Stavový kód HTTP
Tento typ vrátí stavový kód HTTP. Několik pomocných metod tohoto typu jsou
BadRequest,NotFoundaOk. Napříkladreturn BadRequest();při spuštění vytvoří stavový kód 400. Pokud jsou metody, jakoBadRequest,NotFoundaOk, přetíženy, již se neklasifikují jako respondéři HTTP stavových kódů, protože probíhá vyjednávání obsahu.Přesměrovat
Tento typ vrátí přesměrování na akci nebo cíl (pomocí
Redirect,LocalRedirect,RedirectToAction, neboRedirectToRoute). Napříkladreturn RedirectToAction("Complete", new {id = 123});přesměruje naComplete, přičemž předává anonymní objekt.Typ výsledku přesměrování se liší od typu stavového kódu HTTP, a to především při přidání
Locationhlavičky odpovědi HTTP.
2. Metody, které mají za následek neprázdný text odpovědi s předdefinovaným typem obsahu
Většina pomocných metod v této kategorii obsahuje ContentType vlastnost, která umožňuje nastavit hlavičku Content-Type odpovědi pro popis textu odpovědi.
V této kategorii existují dva typy výsledků: Zobrazit a Formátovaná odpověď.
Zobrazení
Tento typ vrátí zobrazení, které používá model k vykreslení HTML. Například
return View(customer);předá model do zobrazení pro datovou vazbu.Formátovaná odpověď
Tento typ vrací formát JSON nebo podobný formát výměny dat, který představuje objekt určitým způsobem. Například
return Json(customer);serializuje zadaný objekt do formátu JSON.Mezi další běžné metody tohoto typu patří
FileaPhysicalFile. Napříkladreturn PhysicalFile(customerFilePath, "text/xml");vrátí PhysicalFileResult.
3. Metody, které mají za následek neprázdný text odpovědi formátovaný v typu obsahu vyjednaný s klientem
Tato kategorie se lépe označuje jako vyjednávání obsahu. Vyjednávání o obsahu se použije vždy, když akce vrátí ObjectResult typ nebo něco jiného, než je implementace IActionResult. Akce, která vrací neimplementaciIActionResult (například object), a zároveň vrátí také formátovanou odpověď.
Mezi pomocné metody tohoto typu patří BadRequest, CreatedAtRoutea Ok. Mezi příklady těchto metod patří return BadRequest(modelState);, return CreatedAtRoute("routename", values, newobject);a return Ok(value);, v uvedeném pořadí. Všimněte si, že BadRequest a Ok provádějí vyjednávání obsahu pouze pokud je předána hodnota; pokud není předána hodnota, slouží místo toho jako typy výsledků stavových kódů HTTP. Metoda CreatedAtRoute naproti tomu vždy provádí konfiguraci obsahu, protože všechna jeho přetížení vyžadují předání hodnoty.
Průřezové otázky
Aplikace obvykle sdílejí části pracovního postupu. Mezi příklady patří aplikace, která vyžaduje ověření pro přístup k nákupnímu košíku, nebo aplikaci, která ukládá data do mezipaměti na některých stránkách. K provedení logiky před nebo po metodě akce použijte filtr. Použití filtrů u průřezových aspektů může snížit duplicitu.
Většina atributů filtru, například [Authorize], lze použít na úrovni kontroleru nebo akce v závislosti na požadované úrovni členitosti.
Zpracování chyb a ukládání odpovědí do mezipaměti jsou často nejčastějšími aspekty:
Mnoho průřezových záležitostí lze zpracovat pomocí filtrů nebo vlastního middlewaru.