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区域路由?的主要内容,如果未能解决你的问题,请参考以下文章
填充区域 (Populating an Area) | 使用区域 | 高级路由特性 | 精通ASP-NET-MVC-5-弗瑞曼
创建一个区域(Creating an Area) |使用区域 | 高级路由特性 | 精通ASP-NET-MVC-5-弗瑞曼