我可以拥有一个与区域同名的控制器吗?

时间:2015-03-20 06:25:16

标签: asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing

假设我的MVC应用程序中有一个名为Admin的区域。此区域的HomeController行为Index,如下所示:

using System.Web.Mvc;

namespace AreasPractice.Areas.Admin.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return Content("Admin.HomeController");
        }

    }
}

管理区域的区域注册对于与区域相关的路径具有以下默认值:

using System.Web.Mvc;

namespace AreasPractice.Areas.Admin
{
    public class AdminAreaRegistration : AreaRegistration
    {
        public override string AreaName
        {
            get
            {
                return "Admin";
            }
        }

        public override void RegisterArea(AreaRegistrationContext context)
        {
            context.MapRoute(
                "Admin_default",
                "Admin/{controller}/{action}/{id}",
                new { controller = "Home", action = "Index", id = UrlParameter.Optional }
                //, new[] { "AreasPractice.Areas.Admin.Controllers" }
            );
        }
    }
}

我的应用程序根区域还有HomeController Index操作和路由配置如下:

using System.Web.Mvc;

namespace AreasPractice.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return Content("From home controller of the root");
        }
    }
}

public class RouteConfig
    {
        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[] { "AreasPractice.Controllers" }
            );
        }
    }

现在,我在应用程序的根区域添加AdminController Index个操作,如下所示:

using System.Web.Mvc;

namespace AreasPractice.Controllers
{
    public class AdminController : Controller
    {
        public ActionResult Index()
        {
            return Content("Root -> Admin Controller -> Index action.");
        }

    }
}

当我运行应用程序时,我希望看到一些有趣的东西,例如,可能是效果的例外,“我无法弄清楚你想要的路线。”

但是当我运行应用程序时,它运行得很好并且请求:

/Admin/

收益率为HomeController区域的Admin

这显然是因为我记得,路由机制是优先工作的。它找到了第一个匹配并随之而来。

显然,即使在应用默认路由之前, Admin_default 路由也会满足请求模式。

我的问题:

  1. 到目前为止我的理解是否正确?

  2. 我该怎么做才能玩呢?如果我想要它去做什么怎么办?     AdminController在应用程序的根区域?

1 个答案:

答案 0 :(得分:0)

好的,经过多思考后我得到了答案。如果我只是在之后将global.asax文件中的区域注册移动到,则默认路由已经注册,现在它将转到我的根的AdminController,而不是转到{{1区域' s Admin

HomeController