使用空白的 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 将不起作用。
我确信这是我错过的一些非常基本的东西。
默认页面是您希望客户在您所在区域拨打电话后看到的第一个地址。 例如,我有一些路线,例如:
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 因为我没有默认的控制器值。
而且,在这种情况下,你必须有一些像这样的图片的目录: