在我的 MVC .NET Core 3.1 项目中,如何防止锚标记助手将 Area 附加到查询字符串?

In my MVC .NET Core 3.1 project, how can I prevent the anchor tag helper from appending Area to the querystring?

我正在将一个旧的 MVC Web 应用程序从 Visual Studio 迁移到 Visual Studio 代码,并且我正在使用 .NET Core 3.1.301。应用程序使用区域。我正在尝试创建从本网站主页到目标区域索引页的 link。

使用锚标记助手,我的 Razor 类似于:

<a asp-area="TargetArea" asp-controller="Home" asp-action="Index">link</a>

我的期望是上面的代码会在呈现的 HTML:

中生成此标记
<a href="/TargetArea">link</a>

相反,这被渲染:

<a href="/TargetArea?area=TargetArea">link</a>

在Startup.cs中我定义了TargetArea:

app.UseEndpoints(endpoints =>
{
  endpoints.MapControllerRoute(
    name: "TargetArea",
    pattern: "TargetArea/{controller=Home}/{action=Index}/{id?}");
  endpoints.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");
});

在我区域内的 HomeController 中,我用 Area 属性装饰了控制器,如下所示:

[Area("TargetArea")]
public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }
}

那么我在这里缺少什么?我想让那个查询字符串消失。感谢您的帮助。

如下更改路线模板:

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
      name: "TargetArea",
      pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}");

    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
});

第二种方式:

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
        name: "TargetArea",
        pattern:"TargetArea/{controller=Home}/{action=Index}/{id?}",
        defaults: new { area = "TargetArea" }, 
        constraints: new { area = "TargetArea" }) ;
    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
});

另一种方式:

app.UseEndpoints(endpoints =>
{
    endpoints.MapAreaControllerRoute(
        name: "MyTargetArea",
        areaName: "TargetArea",
        pattern: "TargetArea/{controller=Home}/{action=Index}/{id?}");
    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
});

参考:

https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/routing?view=aspnetcore-3.1#areas