仅参数路由始终被触发MVC3

时间:2012-06-15 17:36:41

标签: c# asp.net asp.net-mvc asp.net-mvc-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 }
        );

现在当用户访问管理员/帐户/登录页面加载正常时,我的调试器仍然试图进入Home控制器和Page动作。但RouteDebugger表示它与当前请求不匹配。我很困惑如何解决这个问题。

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

2 个答案:

答案 0 :(得分:1)

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

context.MapRoute(
 "admin_default",
 "admin/{controller}/{action}/{id}",
 new { controller = "Home", action = "Index", id = UrlParameter.Optional },
 null,
 new string[] { "MVCApplication1.Areas.admin.Controllers" }
);

答案 1 :(得分:1)

我发现了这个问题。

我在我网站的主要区域设置了favicon.ico,但没有设置管理区域。 因此,当我进入管理区域时,浏览器发出了一条请求获取该路线的favicon.ico的请求。这就是为什么我的路线在RouteDebugger看起来很好,因为它们是。

感谢Kundan的帮助!