如何将除了一个控制器之外的所有控制器路由到“开始”操作,并将所有其他控制器的路由路由到“索引”?

时间:2013-02-01 13:44:32

标签: asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing

我的主要起始页是ApplicantProfile,所以我的默认路线如下:

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "ApplicantProfile", action = "Start", id = UrlParameter.Optional }
);

此控制器没有公共访问索引,但所有其他控制器都没有。我想要的是通配符等价物,例如

routes.MapRoute(
    name: "Others",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "*", action = "Start", id = UrlParameter.Optional }
);

我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:4)

这应该照顾它:

routes.MapRoute(
    name: "Default",
    url: "ApplicantProfile/{action}/{id}",
    defaults: new { controller = "ApplicantProfile", action = "Start", id = UrlParameter.Optional }
);

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { action = "Index", id = UrlParameter.Optional }
);

假设你有ApplicantProfileController,HomeController和OtherController,这将导致:

  • / ApplicantProfile→ApplicantProfileController.Start
  • / Other→OtherController.Index
  • / SomeOtherPath→默认404错误页面
  • /→默认404错误页面

有关路由的介绍,请参阅http://www.asp.net/mvc/tutorials/older-versions/controllers-and-routing/asp-net-mvc-routing-overview-cs。它有点旧,但它很好地涵盖了基础知识。

路由自上而下发生,意味着它在路由表中的第一个匹配处停止。在第一种情况下,您将首先匹配您的ApplicantProfile路线,以便使用该控制器。第二种情况从路径获取其他,找到匹配的控制器并使用它。最后2个找不到匹配的控制器,并且没有指定默认值,因此返回默认的404错误。我建议为错误添加一个合适的处理程序。查看答案herehere

答案 1 :(得分:1)

这应该按照您的要求运作

routes.MapRoute(
    name: "ApplicantProfile",
    url: "ApplicantProfile/Start/{id}",
    defaults: new { controller = "ApplicantProfile", action = "Start", id = UrlParameter.Optional }
);

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

第一个是url,它会将你引导到“Start'Action,另一个是默认替换”Home“控制器和你的默认值

答案 2 :(得分:1)

默认情况下应该使用启动操作转到配置文件控制器,并且所有其他请求应该落在索引操作控制器上。

使用IRouteConstraint将约束添加到其他路径的URL,并将其置于默认控制器上方,并在控制器的路径上使用约束。

如果控制器不是ApplicationProfile,您可以添加一个检查。

我希望这会有所帮助。