web-dev-qa-db-fra.com

Comment utiliser une zone dans ASP.NET Core

Comment utiliser une Area dans ASP.NET Core? 

J'ai une application qui nécessite une section Admin. Cette section nécessite que ses vues soient placées dans cette zone. Toutes les demandes commençant par Admin/ devront être redirigées vers cette zone.

37
Vahid Amiri

Afin d'inclure une zone dans une application ASP.NET Core, nous devons d'abord inclure une route conventionnelle dans le fichier Startup.cs (il est préférable de la placer avant toute route non-région):

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?}");
});

Créez ensuite un dossier nommé Areas dans la racine de l’application et créez un autre nom nommé Admin dans l’ancien. Créez également ces dossiers dans Admin (ViewComponent est facultatif):

 enter image description here

Maintenant, nous créons un contrôleur dans le dossier Controllers nommé AdminController, le contenu peut ressembler à:

[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 maintenant créer des vues pour toutes les actions qui en renvoient une. La hiérarchie des vues est identique à celle que vous avez dans un dossier Vues non-zone:

 enter image description here

Maintenant, vous devriez être prêt à partir!

Question: Et si je devais avoir un autre contrôleur dans ma région?

Réponse:

Ajoutez simplement un autre contrôleur à côté de AdminController et assurez-vous que les itinéraires sont comme suit:

[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 conserver le style de routage sur admin/controller/action/...

58
Vahid Amiri

Échafaudage a généré tous les fichiers et ajouté les dépendances requises.

Toutefois, le code de démarrage de l'application peut nécessiter des modifications supplémentaires pour que les éléments fonctionnent de bout en bout . Ajoutez le code suivant à la méthode Configure dans la classe de démarrage de votre application, si ce n'est déjà fait:

    app.UseMvc(routes =>
    {
      route.MapRoute(
        name : "areas",
        template : "{area:exists}/{controller=Home}/{action=Index}/{id?}"
      );
    });
2
Elnaz
With .net core, following is needed to be added in the startup file if you are adding an area:

     app.UseMvc(routes =>
            {
                routes.MapRoute(
                  name: "areas",
                  template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
                );
            });

After that you can just simply mark your area and route in the controller, i.e
     [Area("Order")]
     [Route("order")]

ça marche pour moi.

0
mukesh joshi

Implémentation de zones dans le routage Créez tout d'abord une zone (Admin) à l'aide de VS et ajoutez le code suivant dans Startup.cs Premier moyen d'implémentation: - Ajouter la connexion et l'index du contrôleur Action et ajouter le code suivant, [Area (“Admin”)] est obligatoire pour ajouter un niveau de contrôleur afin de réaliser le routage des zones asp.net. Startup.cs

 app.UseMvc(routes =>
            {
                routes.MapRoute(
                  name: "areas",
                  template: "{area:exists}/{controller=Login}/{action=Index}/{id?}"
                );
            });

Remarque: le routage de zone doit être placé en premier avec le routage non de zone; zone: il est obligatoire d’ajouter le routage de zone.

Code du contrôleur:

[Area("Admin")] 
    public class LoginController : Controller
    {
        public IActionResult Index()
        {
            return Content("Area Admin Login Controller and Index Action");
        }
    }

Cette route peut être appelée en utilisant http: // localhost: 111/Admin

Deuxième manière d'implémenter le routage de zone: - Ajoutez le code suivant dans startup.cs.

app.UseMvc(routes =>
            {
                routes.MapAreaRoute(
    name: "default",
    areaName: "Guest",
    template: "Guest/{controller}/{action}/{id?}",
    defaults: new { controller = "GuestLogin", action = "Index" });
            });

Créez une zone "Invité", ajoutez un contrôleur "GuestLogin" et une action "Index", puis ajoutez le code suivant dans le contrôleur nouvellement créé.

[Area("Guest")]
    public class GuestLoginController : Controller
    {
        public IActionResult Index()
        {
            return Content("Area Guest Login Controller and Index Action");
        }
    }

Cette route peut être appelée en utilisant http: // localhost: 111/Guest

0
Yogesh Sharma