在 MVC5 中使用区域

using Areas in MVC5

我正在尝试实现如下路由:

等...

我喜欢使用 '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 }
    );
}