我有一个使用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);
这是“区域”文件夹结构:
答案 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
定义以下,现在可以正常使用了。