2013-03-25 21 views
13

palących foldery wyglądać następująco:Routing w obszarze Mvc?

Areas 
    Admin 
     Controllers 
      UserController 
      BranchController 
      AdminHomeController 

katalogi projektowe wyglądać następująco:

Controller 
    UserController 
     GetAllUsers 

rejestracji trasa obszar

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

rejestracji trasa projekt

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

Podczas trasy w następujący sposób: http://mydomain.com/User/GetAllUsers Występuje błąd braku informacji o zasobach (404). Otrzymuję ten błąd po dodaniu UserController do Area.

Jak mogę naprawić ten błąd?

Dzięki ...

Odpowiedz

26

pan zawiedli swoich nazw kontrolera.

Twoim głównym definicja trasa powinna być:

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

A twoja rejestracja trasy administracyjnego powinno być:

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

Wskazówki jak należy stosować poprawnych nazw.

+0

Byłem zdezorientowany przez przestrzenie nazw odpowiadające obszarom. W tym przykładzie przestrzeń nazw MyApp.Areas.Admin.Controllers pasuje do hierarchii folderów, jednak definicja przestrzeni nazw jest dowolna? Oznacza to, że programista może przypisać dowolną przestrzeń nazw do klasy kontrolera, którą chcieli - myślałem. Czy jest jakaś konwencja mvc asp.net, która wymaga, aby przestrzeń nazw pasowała do hierarchii folderów? – Howiecamp

+1

@Howiecamp domyślne zachowanie Visual Studio polega na dopasowaniu przestrzeni nazw do hierarchii folderów i to jest to, co zwykle widzisz we wszystkich projektach .net (nie tylko projekty MVC). –