我正在努力实现如下路线:
等...
我喜欢使用“区域”的想法,并希望通过使用区域来分隔所有代码。所以,我创建了我的区域结构,如下面的screnshot
,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文件夹中分离。
我想知道的是,我是否可以通过使用“区域”来达到我想要的目标,还是我尝试做到这一点是不可能的?
答案 0 :(得分:1)
您需要为路由添加默认控制器名称,以便MVC了解当您从URL中取出控制器路由值时要放入的内容。
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Application_default",
"Application/{action}/{id}",
new { controller = "Application", action = "Index", id = UrlParameter.Optional }
);
}