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

时间:2019-11-21 12:46:12

标签: asp.net asp.net-mvc asp.net-core asp.net-core-3.0

我有一个使用Areas的asp.net core 2.2应用程序。我使用Url.Action("ActionName")生成操作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);

这是“区域”文件夹结构:

enter image description here

3 个答案:

答案 0 :(得分:0)

您可以使用

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

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

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

做把戏。

答案 1 :(得分:0)

按如下所示更改routes.MapAreaRoute

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

答案 2 :(得分:0)

我发现了问题所在。我正在使用routes.MapRoute定义第一条路线(用于错误),这就是问题所在。我将其移动到routes.MapAreaRoute定义以下,现在可以正常使用了。