假设我的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 路由也会满足请求模式。
我的问题:
到目前为止我的理解是否正确?
我该怎么做才能玩呢?如果我想要它去做什么怎么办? AdminController在应用程序的根区域?
答案 0 :(得分:0)
好的,经过多思考后我得到了答案。如果我只是在之后将global.asax文件中的区域注册移动到,则默认路由已经注册,现在它将转到我的根的AdminController
,而不是转到{{1区域' s Admin
。
HomeController