编辑:抱歉,我解释得很糟糕。基本上,在下面的例子中,我希望“this-is-handling-by-content-controller”是“id”,所以我可以在ContentController中将其作为动作参数获取,但我想通过root访问它该网站的内容,例如mysite.com/this-is-not-passed-to-homecontroller。
我正在尝试创建一个根路由,它将转到一个单独的控制器(而不是主页)。
我已经按照其他地方发布的“RootController”示例实现了IRouteConstraint,但它似乎没有用,而且我已经浪费了几个小时了!
基本上,我有一个LoginController,一个HomeController和一个ContentController。
我希望能够通过转到http://mysite/来查看HomeController / Index。我希望能够通过转到http://mysite/Login来查看LoginController / Index。但是..我希望在发生任何其他结果时调用ContentController / Index,例如:http:/ mysite / this-is-handling-by-content-controller
有一种优雅的方式可以做到这一点吗?
这是我的最后一次尝试..我已经剪了/粘贴/复制/刮了我的脑袋这么多次有点乱:
routes.MapRoute(
"ContentPages",
"{action}",
new { Area = "", controller = "ContentPages", action = "View", id = UrlParameter.Optional },
new RootActionConstraint()
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { Area = "", controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
new string[] { "Website.Controllers" }
);
非常感谢任何帮助!
化学
答案 0 :(得分:1)
我会做类似的事情,但如果你将来继续添加更多控制器,这可能不是最好的解决方案。
routes.MapRoute(
"HomePage",
"",
new { controller = "Home", action = "Index", id="" }
);
routes.MapRoute(
"Home",
"home/{action}/{id}",
new { controller = "Home", action = "Index", id="" }
);
routes.MapRoute(
"Login",
"Login/{action}/{id}",
new { controller = "Login", action = "Index", id="" }
);
//... if you have other controller, specify the name here
routes.MapRoute(
"Content",
"{*id}",
new { controller = "Content", action = "Index", id="" }
);
第一条路线适用于您的youwebsite.com/,它可以调用您的Home-> Index。第二个路由是您的家庭控制器上的其他操作(yourwebsite.com/home/ACTION)。
第三个是您的LoginController(yourwebsite.com/login/ACTION)。
最后一个是您的Content-> Index(yourwebsite.com/anything-that-goes-here)。
public ActionResult Index(string id)
{
// id is "anything-that-goes-here
}
答案 1 :(得分:0)
假设你有ContentController.Index(string id)
来处理匹配约束的路由,这应该有效:
routes.MapRoute(
"ContentPages",
"{id}",
new { Area = "", controller = "Content", action = "Index" },
new { id = new RootActionConstraint() }
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}",
new { Area = "", controller = "Home", action = "Index", id = UrlParameter.Optional },
new string[] { "Website.Controllers" }
);