【发布时间】:2016-08-08 19:46:50
【问题描述】:
我正在尝试实现如下路由:
- http://example.com/Admin/Index
- http://example.com/Application/Index
- http://example.com/Customers/Index
等等……
我喜欢使用“区域”的想法,并希望通过使用区域来分隔所有代码。所以,我创建了我的区域结构,如下面的截图
ApplicationAreaRegistration.cs 中的代码是
public override string AreaName
{
get
{
return "Application";
}
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Application_default",
"Application/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
}
但是,我无法达到我想要的路线
http://example.com/Application/Index
取而代之的是http://example.com/Application/Application/Index
我尝试在 AreaRegistration 中更改没有 {controller} 的默认路由
context.MapRoute(
"Application_default",
"Application/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
但是我知道了,Controller 是必需的区域。
我知道如果我将控制器放在根控制器文件夹中,我可以轻松获得http://example.com/Application/Index。但这意味着我不能再像区域那样对我的代码进行分组,它将被分隔在 MVC 文件夹中。
我想知道的是,我是否可以通过使用这些区域来实现我想要的,或者我是否正在尝试做一些不可能的事情?
【问题讨论】:
-
您真的需要区域来执行此操作吗?您所描述的只是多个控制器。您可以修改路由,但在这种情况下没有必要。
-
例如,如果您将第二个控制器添加到某个区域,您希望发生什么?那么 URL 是什么?
-
我不会将第二个控制器添加到一个区域。如果我添加它会变成 Application/Application/ActionA Application/AnotherController/ActionA
-
这就是为什么我很困惑并发布了一个问题。如果我使用多个控制器,我可以得到我想要的。但我想将所有相关代码分组在相关区域中,而不是放在根视图/控制器/模型文件夹中。如果不可能,请随时告诉我。
-
有可能正如下面的答案所示,我只是对您认为您从区域而不是这里的控制器获得什么好处感到困惑。
标签: asp.net-mvc asp.net-mvc-routing asp.net-mvc-areas asp.net-mvc-5