我有两条非常简单的路线
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
答案 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的帮助!