Asp.net core mvc 区域未传递到ASP.net核心中的Url.Action()

Asp.net core mvc 区域未传递到ASP.net核心中的Url.Action(),asp.net-core-mvc,asp.net-core-2.0,Asp.net Core Mvc,Asp.net Core 2.0,以下代码在普通ASP.net MVC中工作 Url.Action("actionName", "controllerName", new { Area = "areaName" }); 但是它在ASP.net内核中并不能很好地工作。区域被识别为查询字符串参数 我怎样才能解决它? 感谢您的帮助。请确保您正在按以下方式注册路线: app.UseMvc(routes => { routes.MapRoute( name: "areaRoute", //

以下代码在普通ASP.net MVC中工作

Url.Action("actionName", "controllerName", new { Area = "areaName" });
但是它在ASP.net内核中并不能很好地工作。区域被识别为查询字符串参数

我怎样才能解决它?
感谢您的帮助。

请确保您正在按以下方式注册路线:

app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "areaRoute",
        // if you don't have such an area named as `areaName` already, 
        //    don't make the part of `{area}` optional by `{area:exists}`
        template: "{area}/{controller=Home}/{action=Index}");  

    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}");
});
我可以通过更改路由顺序或将
{area}
更改为可选来重现与您相同的问题

  • 顺序很重要。
    areaRoute
    应排在第一位。不要改变顺序
  • 在生成指向某个区域的url时,如果您还没有这样的区域,请不要通过
    {area:exists}
    {area}
    的部分更改为可选部分。例如,假设您试图生成一个指向
    MyAreaName
    区域的url:

    Url.Action("actionName", "controllerName", new { Area = "MyAreaName" });
    
    如果您的项目中没有名为
    MyAreaName
    的区域,并且您已通过以下方式将该区域设置为可选的:

    routes.MapRoute(
        name: "areaRoute",
        template: "{area:exists}/{controller=Home}/{action=Index}");
    
    生成的url将是
    controllerName/actionName?Area=MyAreaName


  • Area是ASP.NET Core中的新功能,因此您可以在Startup类中配置它。我已经这样做了,甚至在控制器的第一个部分添加了[Area(“areaName”)]。但是它在Url.Action()上不起作用。您尝试过taghelper语法吗?