Link 一代人没有在区域内建立正确的链接

Link generation not creating proper links to and within area

我有一个 ASP.NET 核心项目,只有一个区域叫做 Data。默认 Home 控制器仍然不在任何区域。

问题

到项目中Data 区域的linking 不起作用。不过路由工作正常。

如果我手动输入 link localhost/Data 我得到控制器 Home 的正确操作 Index面积Data。所以路由绝对有效。

但是 <a asp-area="Data" asp-controller="Home" asp-action="Index">Data</a> 被评估为 link localhost/?area=Data,这不起作用,实际上应该是 localhost/Data

区域 Data 内的链接也未正确评估。 localhost/Data/Controller 应该是 localhost/Controller。再次手动输入 link 工作正常。

配置

到目前为止我是如何配置项目来尝试让 link 工作的: - 路线添加如下

app.UseMvc(routes =>
{
    // Default Route
    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}"
    );
    // Area Route
    routes.MapRoute(
        name: "areas",
        template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
    );
});

我通常尝试遵循 official documentation,但似乎没有任何效果。

问题

所以我显然想让 link 在没有 "hardcoding" 的情况下工作,并且想知道为什么预期的行为似乎不起作用。

如有任何提示,我们将不胜感激。

您需要更改路线的顺序。您应该从更具体的路线开始,然后再到更一般的路线:

app.UseMvc(routes =>
{
    // More specific area route
    routes.MapRoute(
       name: "areas",
       template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
    );
    // Any other (default)
    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}"
    );

});