如何在多个位置定义路由

本文关键字:位置 定义 路由 | 更新日期: 2023-09-27 18:04:31

可以在网站的不同部分定义路由吗?

举个例子,如果我想把我的网站的功能分成几个模块,每个模块将定义它需要的路由。

这可能吗?如何?

如何在多个位置定义路由

考虑使用ASP。. NET MVC的内置区域

一个"区域"本质上是你的模块,区域允许你为每个特定的区域注册路由。

如果你以前没有使用过它们,这里有一个MSDN演练:

http://msdn.microsoft.com/en-us/library/ee671793.aspx

基本上,每个区域都有一个目录,其中包含所有特定于该区域的控制器和视图,并且在该目录的路由中放置一个文件,该文件注册了该特定区域的路由,如下所示:

public class MyAreaRegistration : AreaRegistration
 {
     public override string AreaName
     {
         get { return "My Area"; }
     }
     public override void RegisterArea(AreaRegistrationContext context)
     {
         context.MapRoute(
             "news-articles",
             "my-area/articles/after/{date}",
             new {controller = "MyAreaArticles", action = "After"}
             );
         // And so on ...
     }
}

在global.asax.cs中,你需要注册所有这些额外的区域,以及其他主要路由:

public static void RegisterRoutes(RouteCollection routes)
{
    AreaRegistration.RegisterAllAreas();
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.MapRoute(
        "Products",
        "products/show/{name}",
            new {controller = "Products", action = "Show", name = UrlParameter.Optional}
        );
    ...
}     

您可以在每个模块中放置一个DefineRoutes(RouteCollection routes)方法,然后在Global.asax.cs中调用它们。