区域未传递给ASP.net Core中的Url.Action()

时间:2018-11-04 11:54:28

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

下面的代码在正常的ASP.net MVC中工作。

Url.Action("actionName", "controllerName", new { Area = "areaName" });

但是在ASP.net Core中它不能很好地工作。 Area被识别为查询字符串参数。

我该如何解决? 感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

确保您要注册的路线如下:

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}更改为可选来重现与您相同的问题。

  1. 订单很重要areaRoute应该排在第一位。不要更改顺序。
  2. 在生成指向某个区域的网址时,如果您还没有这样的区域,请不要将{area}的一部分更改为可选{strong} }}。例如,假设您要生成一个指向{area:exists}区域的网址:

    MyAreaName

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

    optional

    生成的网址将为routes.MapRoute( name: "areaRoute", template: "{area:exists}/{controller=Home}/{action=Index}");