Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Készítette: Steve Smith
ASP.NET Core MVC egy gazdag keretrendszer webalkalmazások és API-k létrehozásához a Model-View-Controller tervezési mintával.
MVC-minta
A Model-View-Controller (MVC) architektúraminta az alkalmazásokat három fő összetevőcsoportra választja el: modellek, nézetek és vezérlők. Ez a minta segít az aggodalmak elkülönítésében. Ennek a mintának a használatával a rendszer átirányítja a felhasználói kéréseket egy vezérlőhöz, amely a modell használatával végzi el a felhasználói műveleteket, és/vagy lekéri a lekérdezések eredményeit. Az Adatkezelő kiválasztja a felhasználó számára megjelenítendő nézetet, és megadja neki a szükséges modelladatokat.
Az alábbi ábra a három fő összetevőt mutatja be, és amelyek a többire hivatkoznak:
A felelősségi körök ezen elhatárolása segít az alkalmazás skálázásában, mivel lehetővé teszi az egyszerűbb kódolást, hibakeresést és tesztelést valamin (modellen, nézeten vagy vezérlőn), amely csak egy feladatot lát el. Nehezebb olyan kódot frissíteni, tesztelni és hibakeresést végezni, amely függőségekkel rendelkezik a három terület legalább két területén. A felhasználói felület logikája például gyakrabban változik, mint az üzleti logika. Ha a bemutatókód és az üzleti logika egyetlen objektumban van kombinálva, a felhasználói felület minden módosításakor módosítani kell egy üzleti logikát tartalmazó objektumot. Ez gyakran hibákat okoz, és minden minimális felhasználói felület-módosítás után újra kell tesztelni az üzleti logikát.
Megjegyzés:
A nézet és a vezérlő is a modelltől függ. A modell azonban sem a nézettől, sem a vezérlőtől nem függ. Ez az elkülönítés egyik fő előnye. Ez az elkülönítés lehetővé teszi a modell felépítését és tesztelését a vizuális bemutatótól függetlenül.
Modell feladatai
Az MVC-alkalmazások modellje az alkalmazás állapotát, valamint az általa végrehajtandó üzleti logikát vagy műveleteket jelöli. Az üzleti logikát bele kell ágyazni a modellbe, valamint az alkalmazás állapotának megőrzésére szolgáló implementációs logikát. Az erősen gépelt nézetek általában olyan ViewModel-típusokat használnak, amelyek az adott nézetben megjelenítendő adatokat tartalmazzák. A vezérlő létrehozza és feltölti ezeket a ViewModel-példányokat a modellből.
Felelősségek megtekintése
A nézetek a tartalom felhasználói felületen keresztüli bemutatásáért felelősek. A nézetmotort arra használják, hogy beágyazzák a .NET-kódot a HTML jelölőnyelvbe. A nézetekben minimális logikának kell lennie, és a bennük lévő logikáknak a tartalom bemutatásához kell kapcsolódniuk. Ha sok logikát kell végrehajtania a nézetfájlokban egy összetett modell adatainak megjelenítéséhez, fontolja meg a nézetösszetevő, a ViewModel vagy a nézetsablon használatát a nézet egyszerűsítése érdekében.
Kontroller felelősségei
A vezérlők azok az összetevők, amelyek kezelik a felhasználói interakciót, együttműködnek a modellel, és végül kiválasztanak egy renderelendő nézetet. Egy MVC-alkalmazásban a nézet csak információkat jelenít meg; a vezérlő kezeli és válaszol a felhasználói bemenetekre és interakciókra. Az MVC-mintában a vezérlő a kezdeti belépési pont, és felelős annak kiválasztásáért, hogy melyik modelltípusokkal kell dolgoznia, és hogy melyik nézetet kell megjelenítenie (így a neve – ez szabályozza, hogy az alkalmazás hogyan válaszol egy adott kérésre).
Megjegyzés:
A vezérlőket nem szabad túlságosan bonyolulttá tenni túl sok feladattal. Annak érdekében, hogy a vezérlő logikája ne váljon túlságosan összetetté, küldje ki az üzleti logikát a vezérlőből és a tartománymodellbe.
Jótanács
Ha úgy találja, hogy a vezérlőműveletek gyakran ugyanazokat a műveleteket hajtják végre, helyezze át ezeket a gyakori műveleteket szűrőkbe.
ASP.NET Core MVC
A ASP.NET Core MVC-keretrendszer egy könnyű, nyílt forráskódú, erősen tesztelhető, ASP.NET Core-hoz optimalizált bemutató keretrendszer.
ASP.NET Core MVC mintákon alapuló módszert biztosít dinamikus webhelyek létrehozásához, amelyek lehetővé teszik az aggodalmak tiszta elkülönítését. Teljes körű vezérlést biztosít a korrektúra felett, támogatja a TDD-barát fejlesztést, és a legújabb webes szabványokat használja.
Routing
ASP.NET Core MVC ASP.NET Core útválasztására épül, amely egy hatékony URL-leképezési összetevő, amellyel érthető és kereshető URL-címekkel rendelkező alkalmazásokat hozhat létre. Ez lehetővé teszi, hogy meghatározza az alkalmazás URL-elnevezési mintáit, amelyek jól működnek a keresőmotor-optimalizáláshoz (SEO) és a hivatkozásgeneráláshoz, tekintet nélkül a webkiszolgálón lévő fájlok rendszerezésére. Az útvonalakat egy kényelmes útvonalsablon szintaxisával határozhatja meg, amely támogatja az útvonalérték-korlátozásokat, az alapértelmezett értékeket és az opcionális értékeket.
A konvencióalapú útválasztással globálisan meghatározhatja az alkalmazás által elfogadott URL-formátumokat, és hogy ezek a formátumok hogyan képezhetők le egy adott vezérlő adott műveleti módszerére. Bejövő kérés érkezésekor az útválasztási motor elemzi az URL-címet, és megfelelteti a megadott URL-formátumok egyikének, majd meghívja a társított vezérlő műveleti módszerét.
routes.MapRoute(name: "Default", template: "{controller=Home}/{action=Index}/{id?}");
Az attribútumalapú útválasztás lehetővé teszi az útválasztási információk megadását úgy, hogy a vezérlőket és műveleteket az alkalmazás útvonalait meghatározó attribútumokkal díszíti. Ez azt jelenti, hogy az útvonaldefiníciók annak a vezérlőnek és műveletnek a mellett vannak elhelyezve, amelyhez társítva vannak.
[Route("api/[controller]")]
public class ProductsController : Controller
{
[HttpGet("{id}")]
public IActionResult GetProduct(int id)
{
...
}
}
Modellkapcsolás
ASP.NET Alapszintű MVC-modellkötés az ügyfélkérési adatokat (űrlapértékeket, útvonaladatokat, lekérdezési sztringparamétereket, HTTP-fejléceket) a vezérlő által kezelhető objektumokká alakítja. Ennek eredményeképpen a vezérlő logikájának nem kell elvégeznie a bejövő kérések adatainak felderítését; az adatok egyszerűen paraméterként vannak megadva a műveleti módszereihez.
public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null) { ... }
Modell érvényesítése
ASP.NET Core MVC az érvényesítést úgy támogatja, hogy a modellobjektumot adatjegyzet-érvényesítési attribútumokkal díszíti. Az érvényesítési attribútumokat az ügyféloldalon ellenőrzi a rendszer, mielőtt az értékeket közzétennénk a kiszolgálóra, valamint a kiszolgálón a vezérlőművelet meghívása előtt.
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; }
}
Vezérlő akció:
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);
}
A keretrendszer az ügyfélen és a kiszolgálón egyaránt kezeli a kérelmek adatainak érvényesítését. A modelltípusokon megadott érvényesítési logika nem zavaró széljegyzetekként lesz hozzáadva a renderelt nézetekhez, és a böngészőben jQuery Validation használatával kényszeríti ki.
Függőséginjektálás
ASP.NET Core beépített támogatást nyújt a függőséginjektáláshoz (DI). A ASP.NET Core MVC-ben a vezérlők a konstruktorokon keresztül igényelhetik a szükséges szolgáltatásokat, így az explicit függőségek elvét követhetik.
Az alkalmazás függőséginjektálást is használhat a megtekintési fájlokban az @inject irányelv használatával:
@inject SomeService ServiceName
<!DOCTYPE html>
<html lang="en">
<head>
<title>@ServiceName.GetTitle</title>
</head>
<body>
<h1>@ServiceName.GetTitle</h1>
</body>
</html>
Szűrők
A szűrők segítenek a fejlesztőknek beágyazni a horizontális problémákat, például a kivételkezelést vagy az engedélyezést. A szűrők lehetővé teszik az egyéni elő- és utófeldolgozási logika futtatását a műveleti módszerekhez, és konfigurálhatók úgy, hogy a végrehajtási folyamat bizonyos pontjain fussanak egy adott kéréshez. A szűrők a vezérlőkre vagy műveletekre attribútumként alkalmazhatók (vagy globálisan futtathatók). A keretrendszer számos szűrőt (például Authorize) tartalmaz.
[Authorize] az MVC engedélyezési szűrőinek létrehozásához használt attribútum.
[Authorize]
public class AccountController : Controller
Areas
A területek lehetővé teszik a nagyméretű ASP.NET Core MVC-webalkalmazások kisebb funkcionális csoportokba való particionálását. A terület egy MVC-struktúra egy alkalmazáson belül. Egy MVC-projektben a logikai összetevők, például a Modell, a Vezérlő és a Nézet különböző mappákban vannak tárolva, az MVC pedig elnevezési konvenciók használatával hozza létre az összetevők közötti kapcsolatot. Nagy méretű alkalmazások esetén előnyös lehet az alkalmazás particionálása különböző magas szintű funkciókra. Például egy több üzleti egységet tartalmazó e-kereskedelmi alkalmazás, például a pénztár, a számlázás és a keresés stb. Mindegyik egység saját logikai összetevőnézetekkel, vezérlőkkel és modellekkel rendelkezik.
Webes API-k
Amellett, hogy nagyszerű platform a webhelyek létrehozásához, ASP.NET Core MVC nagyszerű támogatást nyújt a webes API-k létrehozásához. Olyan szolgáltatásokat hozhat létre, amelyek az ügyfelek széles körét érik el, beleértve a böngészőket és a mobileszközöket is.
A keretrendszer tartalomtárgyalás támogatással rendelkezik a beépített támogatás révén az adatok JSON vagy XML formátumba való formázásához. Írjon egyéni formázókat, hogy támogatást adjon saját formátumaihoz.
A hipermédia támogatásának engedélyezéséhez használja a hivatkozásgenerálást. Egyszerűen engedélyezheti a több forrásból származó erőforrás-megosztás (CORS) támogatását, hogy a webes API-k több webalkalmazásban is megoszthatók legyenek.
Tesztelhetőség
Az interfészek és a függőséginjektálás keretrendszer általi használata kiválóan alkalmas az egységtesztelésre, és a keretrendszer olyan funkciókat is tartalmaz (például egy TestHost- és InMemory-szolgáltatót az Entity Frameworkhez), amelyek gyors és egyszerű integrációs teszteket tesznek lehetővé. További információ a vezérlőlogika teszteléséről.
Razor nézetmotor
ASP.NET Alapszintű MVC-nézetek a nézetmotor használatával renderelik a Razor nézeteket. Razor egy kompakt, kifejező és folyékony sablonjelölő nyelv a nézetek beágyazott C#-kóddal történő definiálására. Razor a kiszolgáló webes tartalmának dinamikus létrehozására szolgál. A kiszolgálói kódot az ügyféloldali tartalommal és kóddal is tisztán kombinálhatja.
<ul>
@for (int i = 0; i < 5; i++) {
<li>List item @i</li>
}
</ul>
A Razor nézetmotorral elrendezéseket, részleges nézeteket és cserélhető szakaszokat határozhat meg.
Erősen gépelt nézetek
Razor az MVC nézetei a modellje alapján erősen típusosak lehetnek. A vezérlők egy erősen típusos modellt adhatnak át a nézeteknek, így azok típusellenőrzést és IntelliSense támogatást kapnak.
Az alábbi nézet például egy típusmodellt IEnumerable<Product>jelenít meg:
@model IEnumerable<Product>
<ul>
@foreach (Product p in Model)
{
<li>@p.Name</li>
}
</ul>
Címkesegítők
A címkesegítők lehetővé teszik a kiszolgálóoldali kód használatát a fájlok HTML-elemeinek létrehozásában és renderelésében Razor . A címkesegítők segítségével egyéni címkéket definiálhat (például <environment>), vagy módosíthatja a meglévő címkék viselkedését (például <label>). A címkesegítők az elem neve és attribútumai alapján meghatározott elemekhez kötődnek. Ezek biztosítják a kiszolgálóoldali renderelés előnyeit, miközben továbbra is megőrzik a HTML-szerkesztési élményt.
Számos beépített címkesegéd áll rendelkezésre a gyakori feladatokhoz – például űrlapok, hivatkozások létrehozása, objektumok betöltése stb. – és még több elérhető a nyilvános GitHub-adattárakban és NuGet-csomagokban. A címkesegítők C#-ban vannak megírva, és elemnév, attribútumnév vagy szülőcímke alapján célítanak MEG HTML-elemeket. A beépített LinkTagHelper a Login, illetve AccountsController műveletre mutató hivatkozások létrehozásához használható.
<p>
Thank you for confirming your email.
Please <a asp-controller="Account" asp-action="Login">Click here to Log in</a>.
</p>
A EnvironmentTagHelper különböző szkripteket illeszthet be a nézetekbe (például nyers vagy minimalizált) a futtatókörnyezet alapján, mint például Fejlesztés, Előkészítés vagy Éles környezet.
<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.js"
asp-fallback-src="~/lib/jquery/dist/jquery.js"
asp-fallback-test="window.jQuery">
</script>
</environment>
Címkesegéd HTML-barát fejlesztési élményt és gazdag IntelliSense környezetet biztosít a HTML és Razor jelölés létrehozásához. A beépített címkesegítők többsége a meglévő HTML-elemeket célozza meg, és kiszolgálóoldali attribútumokat biztosít az elemhez.
Összetevők megtekintése
A Nézetösszetevők lehetővé teszik a renderelési logika csomagolását és az alkalmazás egész területén való újrafelhasználását. Hasonlóak a részleges nézetekhez, de a társított logikához.
Kompatibilitási verzió
Ez a SetCompatibilityVersion módszer lehetővé teszi az alkalmazás számára, hogy a ASP.NET Core MVC 2.1 vagy újabb verziójában bevezetett, potenciálisan feltörhető viselkedési változásokról le- vagy leiratkozzon.
További információ: ASP.NET Core MVC kompatibilitási verziója.
További erőforrások
- MyTested.AspNetCore.Mvc – Fluent Testing Library for ASP.NET Core MVC: Erősen gépelt egységtesztelési kódtár, amely folyékony felületet biztosít az MVC és a webes API-alkalmazások teszteléséhez. (A Microsoft nem tartja karban vagy nem támogatja.)
- Függőséginjektálás az ASP.NET Core-ban