我的主要起始页是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 }
);
我怎样才能做到这一点?
答案 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,这将导致:
有关路由的介绍,请参阅http://www.asp.net/mvc/tutorials/older-versions/controllers-and-routing/asp-net-mvc-routing-overview-cs。它有点旧,但它很好地涵盖了基础知识。
路由自上而下发生,意味着它在路由表中的第一个匹配处停止。在第一种情况下,您将首先匹配您的ApplicantProfile路线,以便使用该控制器。第二种情况从路径获取其他,找到匹配的控制器并使用它。最后2个找不到匹配的控制器,并且没有指定默认值,因此返回默认的404错误。我建议为错误添加一个合适的处理程序。查看答案here和here。
答案 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,您可以添加一个检查。
我希望这会有所帮助。