【问题标题】:MVC3 Resource not found - Default area page未找到 MVC3 资源 - 默认区域页面
【发布时间】:2012-02-28 00:21:11
【问题描述】:

这很奇怪。

我已经开发了几个月的网络应用程序在两天前之前一直运行良好。

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

管理员部分的默认页面现在突然显示“找不到资源”消息。此消息与我是通过 RedirectToAction(登录后)还是通过菜单系统的标准返回 View(...) 访问此页面无关。

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

注意: - 其他区域的默认路线仍然正确映射 - 我可以通过在地址栏中使用直接 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 }

    );
}
  • 值得注意的是管理员注册,我尝试使用 a 明确指定命名空间:

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

但没有运气。

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

【问题讨论】:

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


    【解决方案1】:

    使用RouteDebugger Phil Haack wrote,并确保当您前往该路线时,它不会先到达另一条路线。

    路线是“头等舱”的事情。这包括区域注册。 RouteDebugger 会告诉你它认为路由的顺序。

    让您的管理员路由如下:

    context.MapRoute(
        "Admin Dashboard Route",
        "admin",
        new { area = admin, controller = "admindashboard", action = "dashboard" }
    );
    

    并将其放入您的区域注册中。

    它应该可以解决您的问题。

    问题是你的路线不够具体。

    它想要“Admin/something/something”,并且代码说,“好吧,如果“admin”/blank 进入,那与“admin/something/something”路由不匹配,但它确实匹配“默认”路由。它会查看您填写的段数,以及其中的内容(或未填写的内容)。

    【讨论】:

    • 嗨,George,我已经安装了 Phil 编写的 NuGet 调试器。虽然它非常适合初始登录页面,并显示 admin_default 存在的正确路由,但一旦我单击登录(或从另一个页面),因为找不到资源,调试信息会丢失?
    • 您不想使用用作“控件”的那个,而是希望它通过将其配置放在 global.asax 中来拦截调用。由于您无法访问该页面,因此用作控件的页面不会在这里为您提供帮助。
    • 我们还需要查看您的所有路线以及您尝试访问的 URL。
    • 使用控制版本更新带有路由的问题。但是,我无法输入 localhost/Admin url,因为它会导致仍然找不到资源。但从初始页面我可以看到路线已正确注册......你不同意吗?如果更容易阅读,我可以截屏。
    • 你的问题不是很清楚。你输入localhost<foo>/admin是什么意思?那是什么意思?此外,您不想使用控制版本。您想使用它来拦截所有调用并将其发送到路由调试器页面(如果您阅读了 Phil Haack 的说明,则需要在 Application_start 中注册该应用程序,然后重新运行该应用程序。当您输入您认为应该有效的网址,它会告诉您为什么它无效。
    猜你喜欢
    • 1970-01-01
    • 2011-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-09
    • 2017-08-13
    相关资源
    最近更新 更多