未找到MVC3资源 - 默认区域页面

时间:2012-02-06 14:24:38

标签: c# asp.net-mvc-3 routing global-asax asp.net-mvc-areas

这是一个奇怪的。

我已经工作了几个月的网络应用程序在两天前一直工作得很好。

有问题的基本结构包括许多区域(关于“管理”区域的主要问题),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结果。

enter image description here

enter image description here

1 个答案:

答案 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“路线不匹配,但确实如此匹配“默认”路线。它会查看您填写的段数,以及它们中的内容(或不包含的内容)。