This article has been localized into Hungarian by the community.
Attribútum routing
Az előző cikkben az útvonalakról volt szó, arról, hogy hogyan működnek és hogyan definiálhatsz meg sajátot Startup.cs fáljokban. Sok projektben ez a módja az útvonalak megadásának, de van erre persze alternatíva is: az ASP.NET MVC lehetővé teszi útvonalak megadását közvetlen az értük felelős vezérlőben, vagy akár közvetlen az akcióban/metódusban. Ezt attribútum routingnak hívják, mivel ilyenkor attribútumokat használsz az útvonal megadására. Egy példával illusztrálnám ezt:
[Route("/products")]
public class ProductController : Controller
{
public IActionResult Index()
{
return Content("Products Index");
}
}
Az első sor ebben a példában a legfontosabb, ahol a Route() attribútum metódust használom az útvonalséma megszabására. A vezérlőm a "product" szót használja, egyes számban, de URL-ekben azt szeretném, ha többes számot kelljen használni (products). Ezt elérhetem azzal, hogy ezt a szót használom a vezérlő útvonalsémájaként - így használhatok olyan URL-eket, mint /products/ vagy /products, mivel ezek most már alapértelmezetten az Index metódushoz vezetnek.
Ez egy egyszerű példa volt, ami csak azért működött, mert automatikusan az Index metódus lesz hívva ilyen esetekben, de az attribútum routing sokkal összetettebb feladatokra is használható. A vezérlőnk adhatna vissza például egy bizonyos terméket is az általános indexen kívül. Írjunk egy metódust most erre, és egyben szabjunk is meg egy hozzáférési útvonalat:
[Route("/products")]
public class ProductController : Controller
{
public IActionResult Index()
{
return Content("Products Index");
}
[Route("{id}")]
public IActionResult Details(int id)
{
return Content("Product #" + id);
}
}
Itt a Details metódushoz is tettem egy Route attribútumot. Különleges szintaxist használ változó tartalom megadásához, mégpedig hogy a paraméter nevét kapcsos zárójelek közé tesszük. Ezt később még alaposabban vesszük, egyelőre annyit, hogy így megadhatjuk a paraméter nevét, amit a metódus kapni fog. Ebben az esetben ez annyit tesz, hogy egy terméket lekérhetünk és megjeleníthetünk azáltal, hogy az URL végére egy ID számot teszünk (az egyszerűség kedvéért itt csak kiírjuk a számot). A vezérlőnk most már a /produts/42 és /productions/84/ formájú URL-eket is támogatja (az utolsó perjel opcionális itt is).
Fontos megjegyezni hogy csak az útvonalséma utolsó elemét adtam meg, mivel a vezérlőnél már meg van adva, hogy először a products kell jöjjön. Ha ez nem így lenne, akkor megadhatnánk akár az egész URL sémát a metóduson is, így:
[Route("/products/{id}")]
public IActionResult Details(int id)
{
return Content("Product #" + id);
}
Az, hogy részben a vezérlőn és részben a metóduson, vagy minden metóduson teljesben szabod meg a sémát, csak rajtad és az aktuális helyzeten múlik. Ha például a vezérlőd több mint egy belépési URL-t kell támogasson, akkor hasznos lehet minden metóduson külön megadni a sémát, de általában kevesebb munkát jelent, ha közös belépési pont van a vezérlőn, az URL maradéka pedig metódusonként van megadva.
Lehetnek helyzetek ahol azt szeretnéd, hogy egy metódushoz egynél több útvonal vezessen. Ez könnyen elérhető, mivel annyi útvonalat adhatsz meg, amennyit csak akarsz. Akár keverheted is a részleges és teljes definíciókat:
[Route("/products")]
public class ProductController : Controller
{
public IActionResult Index()
{
return Content("Products Index");
}
[Route("{id}")]
[Route("/product/{id}")]
public IActionResult Details(int id)
{
return Content("Product #" + id);
}
}
A fenti példával a termékrészletező oldalunk a "product" szó egyesszámú és többesszámú formáját használó URL-ekkel is elérhető. Ez az eredmény elérhető más módokon is, valamelyest flexibilisebb útvonal megadásával, de a fenti egy jó példa arra, hogy milyen könnyű is több útvonalat megadni.
Összefoglalás
Az attribútum routing jó alternatíva az útvonalak általános megadására. Mivel közvetlen a vezérlőn vannak definiálva, ezért könnyebben értelmezhető, hogy mely útvonalak érvényesek egy bizonyos vezérlőre és metódusra. Ezt használva vannak azonban bizonyos korlátozások, különösen a routing korlátokat illetően, de a legtöbb esetben ez nem probléma. Ha mégis beleszaladnál ezekbe, akkor tartsd észben, hogy szabadon ötvözheted a hagyományos routingot az attribútum routinggal.
Végső soron az, hogy használsz-e attribútum routingot vagy sem, pusztán saját preferenciáidon és projekted követelményein múlik.