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

C# 未找到MVC3资源-默认区域页面,c#,asp.net-mvc-3,routing,global-asax,asp.net-mvc-areas,C#,Asp.net Mvc 3,Routing,Global Asax,Asp.net Mvc Areas,这是一个奇怪的问题 我已经开发了几个月的一个web应用程序,直到两天前,它的工作状态还非常好 讨论中的基本结构包括多个区域(主要问题涉及“管理”区域)、MVC项目最高级别的默认控制器/视图以及Castle.Windsor DI管道 出乎意料的是,管理部分的默认页面现在显示一条“资源未找到”消息。此消息与我是通过RedirectToAction(登录后)还是通过菜单系统的标准返回视图(…)访问此页面无关 有没有人有任何理由说明这条路线不再有效?或者这里发生了什么 注意: -其他区域默认路线仍正确映

这是一个奇怪的问题

我已经开发了几个月的一个web应用程序,直到两天前,它的工作状态还非常好

讨论中的基本结构包括多个区域(主要问题涉及“管理”区域)、MVC项目最高级别的默认控制器/视图以及Castle.Windsor DI管道

出乎意料的是,管理部分的默认页面现在显示一条“资源未找到”消息。此消息与我是通过RedirectToAction(登录后)还是通过菜单系统的标准返回视图(…)访问此页面无关

有没有人有任何理由说明这条路线不再有效?或者这里发生了什么

注意: -其他区域默认路线仍正确映射 -我可以使用地址栏中的直接url访问其他每一页。 -管理员的默认路由(以及我需要的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 }

    );
}
  • 值得注意的是,对于管理员注册,我已尝试使用以下命令显式指定命名空间:

    新的{“xx.xx.xx.xx.Admin”}

但是没有运气

但是,尝试键入localhost/Admin仍会导致找不到资源

使用,并确保当您走到该路线时,它不会先撞到另一条路线

路线是一个“头号赢家”事件。这包括区域登记。RoutedBugger将显示它认为路线的顺序

将您的管理路由设置为:

context.MapRoute(
    "Admin Dashboard Route",
    "admin",
    new { area = admin, controller = "admindashboard", action = "dashboard" }
);
然后把它放在你的注册区域

它应该能解决你的问题

问题是你的路线不够具体


它需要“Admin/something/something”,代码是“如果输入了“Admin”/blank,则与“Admin/something/something”路由不匹配,但与“default”路由匹配。它会查看您填写的段数,以及什么(或什么不是)在它们中。

Hi George,我已经安装了Phil已经编写的NuGet调试器。虽然它在初始登录页面上工作得非常好,并且在我单击“登录”(或者从另一个页面)后显示了管理员默认存在的正确路由由于找不到资源,调试信息丢失?您不想使用作为“控件”的资源,而是希望它通过将其配置放置在global.asax中来拦截调用。由于您无法访问该页面,因此作为控件的资源在这里对您没有帮助。我们还需要查看您的所有配置路由和您试图点击的url。使用控制版本用路由更新问题。但是,我无法在中键入localhost/Admin url,因为它导致仍然找不到资源。但是从初始页面我可以看到路由已正确注册…您不同意吗?如果更容易阅读,我可以做屏幕截图。您的问题ms不是很清楚。键入
localhost/admin
是什么意思?这意味着什么?另外,您不希望使用控件版本。您希望使用它以拦截所有调用并将其发送到路由调试器页面(如果你阅读Phil Haack的说明,你需要在你的
应用程序\u start
中注册该应用程序,然后重新运行该应用程序。当你键入你认为应该有效的URL时,它会告诉你为什么它不起作用。