这是一个奇怪的。
我已经工作了几个月的网络应用程序在两天前一直工作得很好。
有问题的基本结构包括许多区域(关于“管理”区域的主要问题),MVC项目最高级别的默认控制器/视图以及Castle.Windsor DI管道。
显然,Admin部分的默认页面显示“找不到资源”消息。此消息与我是通过RedirectToAction(登录后)还是通过标准返回视图(...)通过菜单系统访问此页面无关。
有没有人有理由说明这条特定路线不再有效?或者最新消息?
NB: - 其他区域默认路线仍然正确映射 - 我可以使用直接网址访问地址栏中的每个其他页面。 - admin(以及我需要的其他8个)的默认路由在路由表中显示正常
Global.asax的东西:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterModelBinders();
RegisterRoutes(RouteTable.Routes);
ServiceLocator.SetLocatorProvider(() => new WindsorServiceLocator(_container));
BoostrapContainer();
}
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" });
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "LogOn", id = UrlParameter.Optional }
);
}
管理区域注册:
public override string AreaName
{
get
{
return "Admin";
}
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Admin_default",
"Admin/{controller}/{action}/{id}",
new { controller = "AdminDashboard", action = "AdminDashboard", id = UrlParameter.Optional }
);
}
值得注意的是管理员注册我尝试使用:
明确指定命名空间new {“xx.xx.xx.xx.Admin”}
但没有运气。
但是,尝试在未找到的资源中键入localhost / Admin结果。
答案 0 :(得分:0)
使用RouteDebugger Phil Haack wrote,并确保当您前往该路线时,它不会先到达另一条路线。
路线是'顶级胜利'事件。这包括区域注册。 RouteDebugger将显示它认为路线的顺序。
让您的管理员路线:
context.MapRoute(
"Admin Dashboard Route",
"admin",
new { area = admin, controller = "admindashboard", action = "dashboard" }
);
并将其放置在您的区域注册中。
它应该可以解决您的问题。
问题是您的路线不够具体。
它想要“管理员/某事/某事”,并且代码说,“好吧,如果”admin“/ blank进来,那与”admin / something / something“路线不匹配,但确实如此匹配“默认”路线。它会查看您填写的段数,以及它们中的内容(或不包含的内容)。