切换到 ASP.NET 核心 3 后由 RedirectToAction 和 Url.Action 生成的 URL 中不存在的区域

Area not present in an URL generated by RedirectToAction and Url.Action after switching to ASP.NET core 3

我有一个使用区域的 asp.net 核心 2.2 应用程序。我使用 Url.Action("ActionName") 生成一个动作 URL。这会生成以下格式的 url <area-name>/<controller-name>/<action-name>.

我已升级到 .net core 3,升级后生成的 URL 不再包含 <area-name> 部分,仅生成 <controller-name>/<action-name>

我阅读了 3.0 中引入的更改,但没有发现任何有用的内容。

有什么想法吗?

编辑:代码设置

这是startup.cs

中的路由设置方式
app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "error",
        template: "{controller}/{action}",
        defaults: new { controller = "Error", action = "Error" },
    );

    routes.MapAreaRoute(
        name: "admin",
        areaName: "admin",
        template: "{area}/{controller}/{action}/{id?}",
        defaults: new { area = "admin", action = "index" },
    );

    routes.MapAreaRoute(
        name: "identity",
        areaName: "identity",
        template: "{area}/{controller}/{action}",
        defaults: new { area = "identity", action = "index" }
    );

    routes.MapAreaRoute(
        name: "cmsfront",
        areaName: "cmsfront",
        template: "{*url}",
        defaults: new { controller = "Front", action = "Index" }
    );

    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}");
    });

下面是 MVC 的设置方式:

services
            .AddMvc(setupAction =>
            {
                setupAction.EnableEndpointRouting = false;
            })
            .SetCompatibilityVersion(CompatibilityVersion.Latest);

这是区域文件夹结构:

您可以使用

<a asp-area="AreaName" asp-page="PageName">Link</a>

应用程序中的任何地方。 如果您已经在区域内的页面上,

<a asp-page="PageName">Link</a>

成功了。

更改 routes.MapAreaRoute 如下所示:

routes.MapRoute(
              name: "admin",
              template: "{area=admin}/{controller=Test}/{action=Index}/{id?}");

我找到问题所在了。我正在使用 routes.MapRoute 定义第一条路线(用于错误),这导致了问题。我将其移至 routes.MapAreaRoute 定义下方,现在它按预期工作。