2013-03-25 124 views
13

區域的文件夾的樣子:Mvc區域路由?

Areas 
    Admin 
     Controllers 
      UserController 
      BranchController 
      AdminHomeController 

項目目錄,如下所示:

Controller 
    UserController 
     GetAllUsers 

地區航線登記

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

項目路線註冊

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

當我像這樣路由:http://mydomain.com/User/GetAllUsers我得到資源未找到錯誤(404)。將UserController添加到區域後出現此錯誤。

我該如何解決這個錯誤?

謝謝...

回答

26

你弄亂了你的控制器命名空間。

你的主要路線定義應該是:

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

而且你的管理區登記的路線應該是:

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

注意正確的命名空間應該如何使用。

+0

我一直困惑的地區對應的命名空間。在這個例子中,名稱空間MyApp.Areas.Admin.Controllers與文件夾層次結構匹配,但名稱空間定義是任意的?這意味着程序員可以將任何命名空間分配給他們想要的控制器類 - 我想。或者是否有一些asp.net mvc約定需要他的命名空間來匹配文件夾層次結構? – Howiecamp 2014-08-25 05:36:53

+1

@Howiecamp Visual Studio的默認行爲是將命名空間與文件夾層次結構進行匹配,這就是所有.net項目(不僅僅是MVC項目)中通常會看到的內容。 – 2014-11-26 03:42:10