如何仅在ASP.NET MVC中基于控制器名称路由URL

时间:2014-04-15 13:40:02

标签: c# asp.net-mvc asp.net-mvc-routing

我希望当URL只包含一个控制器(无动作)时,它会自动瞄准输入控制器的Index动作。但是,我仍然希望默认路由成为登录页面。

默认路线为:

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

第二条路线应该是什么样的?所以mydomain.com/Account应该转到Controller = Account,Action = Index,同时保持域/ controller / action / params的正常结构不变。

谢谢!

1 个答案:

答案 0 :(得分:1)

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 → default 404 error page
/ → default 404 error page

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

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