mvc区域路由?

Posted

技术标签:

【中文标题】mvc区域路由?【英文标题】:Mvc area routing? 【发布时间】:2013-03-15 00:27:12 【问题描述】:

区域文件夹如下所示:

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 添加到 Area 后出现此错误。

如何解决此错误?

谢谢...

【问题讨论】:

【参考方案1】:

你搞砸了你的控制器命名空间。

您的主要路线定义应该是:

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

注意应该如何使用正确的命名空间。

【讨论】:

我一直对与区域对应的命名空间感到困惑。在此示例中,名称空间 MyApp.Areas.Admin.Controllers 与文件夹层次结构匹配,但是名称空间定义是任意的,对吗?这意味着程序员可以将任何命名空间分配给他们想要的控制器类——我想。还是有一些 asp.net mvc 约定需要他的命名空间来匹配文件夹层次结构? @Howiecamp Visual Studio 的默认行为是将命名空间与文件夹层次结构相匹配,这是您通常会在所有 .net 项目(不仅仅是 MVC 项目)中看到的。【参考方案2】:

最新的 ASP.NET Core MVC 解决方案。

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

来源:https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/areas

【讨论】:

以上是关于mvc区域路由?的主要内容,如果未能解决你的问题,请参考以下文章

MVC 区域路由登录后

ASP.NET MVC 中的区域路由

如何在 MVC 中设置默认路由(到某个区域)

填充区域 (Populating an Area) | 使用区域 | 高级路由特性 | 精通ASP-NET-MVC-5-弗瑞曼

创建一个区域(Creating an Area) |使用区域 | 高级路由特性 | 精通ASP-NET-MVC-5-弗瑞曼

在路由路径上公开属于 MVC 应用程序中区域的 WCF 服务