切换到 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
定义下方,现在它按预期工作。
我有一个使用区域的 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
定义下方,现在它按预期工作。