1

我的主要起始页是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 }
);

我怎样才能做到这一点?

4

3 回答 3

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 }
);

假设您有申请人ProfileController、HomeController 和OtherController,这将导致:

  • /ApplicantProfile → 申请人ProfileController.Start
  • /Other → OtherController.Index
  • /SomeOtherPath → 默认 404 错误页面
  • /→默认404错误页面

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

路由发生自上而下,这意味着它在路由表中的第一个匹配项处停止。在第一种情况下,您将首先匹配您的申请者配置文件路由,以便使用控制器。第二种情况从路径中获取 Other,找到匹配的控制器并使用它。最后 2 个没有找到匹配的控制器,并且没有指定默认值,因此返回默认的 404 错误。我建议为错误放置一个适当的处理程序。在此处此处查看答案。

于 2013-02-01T14:14:42.343 回答
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,另一个是默认将“Home”控制器替换为您的默认控制器

于 2013-02-04T08:36:29.517 回答
1

默认应该使用启动操作转到配置文件控制器,并且所有其他请求都应该登陆到索引操作,无论控制器是什么。

使用 IRouteConstraint 将约束添加到其他路由的 URL,并将其放置在默认控制器之上,并在控制器的路由上设置约束。

您可以添加一个检查控制器是否不是 ApplicationProfile 使用它。

我希望这有帮助。

于 2013-02-08T11:33:51.967 回答