web-dev-qa-db-fra.com

Mvc zone de routage?

Les dossiers de zone ressemblent à:

Areas 
    Admin
        Controllers
            UserController
            BranchController
            AdminHomeController

Les répertoires de projets ressemblent à:

Controller
    UserController
        GetAllUsers

enregistrement d'itinéraire de secteur

public override void RegisterArea(AreaRegistrationContext context)
{
    context.MapRoute(
        "Admin_default",
        "Admin/{controller}/{action}/{id}",
        new { action = "Index", id = UrlParameter.Optional },
        new { controller = "Branch|AdminHome|User" }
    );
}

enregistrement de l'itinéraire du projet

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
        namespaces: new string[] { "MyApp.Areas.Admin.Controllers" });
}

Quand je route comme ceci: http://mydomain.com/User/GetAllUsers j'obtiens une erreur de ressource non trouvée (404). Je reçois cette erreur après avoir ajouté UserController à Area.

Comment puis-je réparer cette erreur? 

Merci... 

14

Vous avez endommagé les espaces de noms de votre contrôleur. 

Votre définition d'itinéraire principal devrait être:

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
    namespaces: new string[] { "MyApp.Controllers" }
);

Et l'enregistrement de votre itinéraire dans la zone d'administration doit être:

public override void RegisterArea(AreaRegistrationContext context)
{
    context.MapRoute(
        "Admin_default",
        "Admin/{controller}/{action}/{id}",
        new { action = "Index", id = UrlParameter.Optional },
        new { controller = "Branch|AdminHome|User" },
        new[] { "MyApp.Areas.Admin.Controllers" }
    );
}

Notez comment les espaces de noms corrects doivent être utilisés.

27
Darin Dimitrov

Une solution à jour pour ASP.NET Core MVC.

[Area("Products")]
public class HomeController : Controller

Source: https://docs.Microsoft.com/en-us/aspnet/core/mvc/controllers/areas

0
Mark