3

我有两条非常简单的路线

       routes.MapRoute(
            "post", // Route name
            postPage + "/{slug}", // URL with parameters
            new { controller = "Home", action = "Article" } // Parameter defaults
        );

        routes.MapRoute(
            "page", // Route name
            "{slug}", // URL with parameters
            new { controller = "Home", action = "Page", slug = homePage} // Parameter defaults
        );

这是我的控制器逻辑

    public ActionResult Article(string slug)
    {
        return View(repo.GetPost(slug));
    }

    public ActionResult Page(string slug)
    {
        if (slug.ToLower() == MetaData.PostsPage.ToLower())
            return View("listPosts", repo.GetAllPosts());
        else
            return View("page", repo.GetPage(slug));
    }

homePage 和 postPage 是从数据库中的值设置的。允许用户定义默认页面以及显示帖子的页面。

添加名为“Admin”的区域时出现我的问题。我将控制器添加到我的 RouteTable

    context.MapRoute(
            "Admin_default",
            "Admin/{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional }
        );

现在,当用户访问 Admin/Account/Logon 时,页面加载正常,但我的调试器仍然尝试进入 Home 控制器和 Page 操作。但是 RouteDebugger 说它与当前请求不匹配。我很困惑如何解决这个问题。

RouteDebugger 截图: http: //i.stack.imgur.com/7cpHm.png 调试器进入我的 HomeControler 页面 AtionResult:http: //i.stack.imgur.com/uSJBK.png

4

2 回答 2

1

我发现了这个问题。

我在网站的主要区域设置了 favicon.ico,但没有在管理区域设置。因此,当我进入管理区域时,浏览器向 favicon.ico 发出了请求,该请求被该路由获取。这就是为什么我的路线在 RouteDebugger 中看起来不错的原因,因为它们确实如此。

感谢昆丹的帮助!

于 2012-06-15T21:04:25.363 回答
1

实际上问题是,区域路由覆盖了全局路由,为了区分这两个路由,在 adminAreaRegistraton.cs 文件中的 context.MapRoute 方法中设置区域控制器的相关命名空间。IE

context.MapRoute(
 "admin_default",
 "admin/{controller}/{action}/{id}",
 new { controller = "Home", action = "Index", id = UrlParameter.Optional },
 null,
 new string[] { "MVCApplication1.Areas.admin.Controllers" }
);
于 2012-06-15T17:54:34.283 回答