C#MVC 3 Root Route似乎不起作用

时间:2011-02-14 03:13:56

标签: c# asp.net-mvc model-view-controller asp.net-mvc-3

编辑:抱歉,我解释得很糟糕。基本上,在下面的例子中,我希望“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" }
        );

非常感谢任何帮助!

化学

2 个答案:

答案 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" }
    );