Afin d'inclure une zone dans une application ASP.NET Core, nous devons tout d'abord inclure une route conventionnelle dans le fichier Startup.cs
(Il est préférable de le placer avant toute route non régionale) :
Dans la méthode Startup.cs/Configure :
app.UseMvc(routes =>
{
routes.MapRoute("areaRoute", "{area:exists}/{controller=Admin}/{action=Index}/{id?}");
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
Ensuite, créez un dossier nommé Areas
dans la racine de l'application et en créer un autre nommé Admin
à l'intérieur du premier, faites également en sorte que ces dossiers soient à l'intérieur du second. Admin
(ViewComponent est facultatif) :
![enter image description here]()
Maintenant, nous créons un contrôleur à l'intérieur du Controllers
dossier nommé AdminController
le contenu peut être comme :
[Area("Admin")]
[Route("admin")]
public class AdminController : Controller
{
public AdminController()
{
// do stuff
}
public IActionResult Index()
{
return View();
}
[Route("[action]/{page:int?}")]
public IActionResult Orders()
{
return View();
}
[Route("[action]")]
public IActionResult Shop()
{
return View();
}
[Route("[action]/newest")]
public IActionResult Payments()
{
return View();
}
}
Pour que cela fonctionne, vous devez créer des vues pour toutes les actions qui renvoient un résultat. La hiérarchie des vues est identique à celle que vous avez dans un dossier Views hors zone :
![enter image description here]()
Maintenant, vous devriez être prêt à partir !
Question : Que faire si je veux avoir un autre contrôleur dans ma zone ?
Réponse :
Il suffit d'ajouter un autre contrôleur à côté AdminController
et assurez-vous que les routes sont comme les suivantes :
[Area("Admin")]
[Route("admin/[controller]")]
public class ProductsController : Controller
{
public ProductsController()
{
//
}
[Route("{page:int?}")]
public IActionResult Index()
{
return View();
}
}
La partie importante est [Route("admin/[controller]")]
. Avec cela, vous pouvez garder le style de routage à admin/controller/action/...