带有区域的 MVC 路由

问题描述 投票:0回答:1

使用空白的 MVC 模板创建了两个区域 - 常规区域和安全区域。

我对路由的理解是,如果未指定特定链接,它将加载默认页面...

Public Module RouteConfig
Public Sub RegisterRoutes(ByVal routes As RouteCollection)
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
    routes.MapMvcAttributeRoutes


    routes.MapRoute(
     name:="Secure",
     url:="{controller}/{action}/{id}",
     defaults:=New With {.controller = "Manage", .action = "Landing", .id = UrlParameter.Optional}
     ).DataTokens = New RouteValueDictionary(New With {.area = "Secure"})

    routes.MapRoute(
       name:="Default",
       url:="{controller}/{action}/{id}",
       defaults:=New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional}
   ).DataTokens = New RouteValueDictionary(New With {.area = "General"})





End Sub
End Module

所以我本以为它会跳过第一条路线并加载 /Home/Index,但事实并非如此。

如果我交换它们(默认第一个),它将加载主页/索引,除非我在选定页面的 VS 中运行 - 调试 > 启动而不运行调试 - 。在这种情况下,它会尝试加载 /General/Controller/View,当然,IIS 会扔掉这些玩具,因为它对此不满意,它需要 /Controller/View

首先加载默认路由,如果我想链接到其他区域的页面,则需要采用 /Area/Controller/View 格式,/Controller/View 将不起作用。

我确信这是我错过的一些非常基本的东西。

asp.net-mvc routes
1个回答
0
投票

默认页面是您希望客户在您所在区域拨打电话后看到的第一个地址。 例如,我有一些路线,例如:

  routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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

所以,如果我的客户调用我的地址(https://localhost:44367/(whitout Areas))将其路由到 HomeController Index

然后我配置我的区域,例如:

context.MapRoute(
     "Group_default",
     "Group/{controller}/{action}/{id}",
     new { action = "Index", id = UrlParameter.Optional }
 );

namespace GSS.Web.Areas.Group
{
    public class GroupAreaRegistration : AreaRegistration 
    {
        public override string AreaName 
        {
            get 
            {
                return "Group";
            }
        }

        public override void RegisterArea(AreaRegistrationContext context) 
        {
            context.MapRoute(
                "Group_default",
                "Group/{controller}/{action}/{id}",
                new { controller = "Group",action = "Index", id = UrlParameter.Optional }
            );
        }
    }
}

所以通过上面的配置,当我的客户端调用我的区域(https://localhost:44367/Group)时,它将路由到我的 GroupController 中 集团区域。 如果我使用类似的东西:

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

我的控制器只能通过以下方式访问:https://localhost:44367/Group/Group 因为我没有默认的控制器值。

而且,在这种情况下,你必须有一些像这样的图片的目录:

enter image description here

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.