在 MVC5 中使用区域
using Areas in MVC5
我正在尝试实现如下路由:
- http://example.com/Admin/Index
- http://example.com/Application/Index
- http://example.com/Customers/Index
等...
我喜欢使用 'Areas' 的想法,并希望通过使用区域来分隔所有代码。所以,我创建了我的区域结构,如下面的截图
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 }
);
但是我知道了,控制器是必需的区域。
我知道如果我将控制器放在根控制器文件夹中,我可以轻松获得 http://example.com/Application/Index。但这意味着我不能再像区域那样对我的代码进行分组,它将在 MVC 文件夹中分开。
我想知道的是,我是否可以通过使用区域实现我想要的,或者我正在尝试做这是不可能的?
您需要将默认控制器名称添加到路由中,以便 MVC 了解在从 URL 中取出控制器路由值时要放入的内容。
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Application_default",
"Application/{action}/{id}",
new { controller = "Application", action = "Index", id = UrlParameter.Optional }
);
}
我正在尝试实现如下路由:
- http://example.com/Admin/Index
- http://example.com/Application/Index
- http://example.com/Customers/Index
等...
我喜欢使用 'Areas' 的想法,并希望通过使用区域来分隔所有代码。所以,我创建了我的区域结构,如下面的截图
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 }
);
但是我知道了,控制器是必需的区域。
我知道如果我将控制器放在根控制器文件夹中,我可以轻松获得 http://example.com/Application/Index。但这意味着我不能再像区域那样对我的代码进行分组,它将在 MVC 文件夹中分开。
我想知道的是,我是否可以通过使用区域实现我想要的,或者我正在尝试做这是不可能的?
您需要将默认控制器名称添加到路由中,以便 MVC 了解在从 URL 中取出控制器路由值时要放入的内容。
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Application_default",
"Application/{action}/{id}",
new { controller = "Application", action = "Index", id = UrlParameter.Optional }
);
}