是否可以将默认路由的`area=""`改为非空字符串值?

Can `area=""` of the default route be changed to non-empty string value?

在 Visual Studio 中创建新的 MVC 项目时,在 _Layout.cshtml 文件中创建的导航栏包含如下所示的 link。它的作用是作为您应用程序的 "Home" 按钮,area="" 值表示默认区域。

它工作得很好,但我想知道是否可以用命名值替换 ""

@Html.ActionLink("Sample", "Index", "Home", 
      new { area = "" }, new { @class = "navbar-brand" })

我查看了默认路由,没有看到任何区域参数。

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

我可以做一些简单的调整,以便 area="" 可以写成 `area="default" 或其他一些非空值吗?

使用 ActionLink/RouteLink/UrlHelper 时有一种特殊情况,您必须将 area 放入路由值集合中。

然而,在幕后 MVC 实际上使用 DataTokens["area"] 来确定要匹配的区域。因此,如果您正在与当前请求进行比较,您可以检查 DataTokens["area"] 是否存在 - 如果不存在,则表示对默认区域的请求。

如果您希望它们特定于某个区域,您也可以在路线配置中的路线上设置该参数。

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