ASP.NET MVC4路由 - 到同一位置的多个路由

时间:2013-04-28 16:34:51

标签: asp.net-mvc c#-4.0 asp.net-mvc-4 asp.net-mvc-routing single-page-application

我正在设置单页应用程序(SPA)并且想要设置,目前有两条路线。例如:

  • 路由1:http://localhost - 这是需要身份验证的默认路由(管理区域)
  • 路线2:http://localhost/<client>/<clients project name>/ - 这不需要身份验证(仅查看)

在管理区域,他们设置了<client><clients project name>,因此我知道我需要在MVC4路由中设置此配置,但我不清楚我将如何处理此问题。

另一个警告是,如果未在网址中输入<clients project name>,则会显示该客户的搜索页面。

1 个答案:

答案 0 :(得分:5)

在MVC中进行路由的一个好处是能够将任何内容路由到任何地方,无论url是否与控制器和操作方法的命名相匹配。 RouteConfig允许我们注册特定路线以满足此需求。让我告诉你如何实现这一目标。

路线1:

这由路由配置中的默认路由处理。

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

点击http://localhost会转到Home控制器和Index操作方法。

路线2:

我们可以设置一条适合http://localhost/<client>http://localhost/<client>/<clients project name>

的路线
routes.MapRoute(
    "Client", 
    "{client}/{title}", 
    new { controller = "Home", 
          action = "Client", 
          title = UrlParameter.Optional });

点击http://localhost/baconhttp://localhost/bacon/smokey会转到Home控制器和Client操作方法。请注意,title是一个可选参数,这是我们如何使两个网址使用相同的路由。

为了在控制器端工作,我们的操作方法Client需要看起来像这样。

public ActionResult Client(string client, string title = null)
{
    if(title != null)
    {
       // Do something here.
    }
}