在控制器中使用Area时Url.Action()的结果

时间:2019-04-30 01:39:27

标签: c# asp.net-mvc asp.net-core .net-core

我正在阅读Microsoft文档,其中解释了如何使用Area路由https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/routing?view=aspnetcore-2.2#areas

有1个我听不懂的部分。

app.UseMvc(routes =>
{
    routes.MapAreaRoute("duck_route", "Duck",
        "Manage/{controller}/{action}/{id?}");
    routes.MapRoute("default", "Manage/{controller=Home}/{action=Index}/{id?}");
});

控制器:

using Microsoft.AspNetCore.Mvc;

namespace MyApp.Namespace4
{
    [Area("Duck")]
    public class UsersController : Controller
    {
        public IActionResult GenerateURLInArea()
        {
            // Uses the 'ambient' value of area
            var url = Url.Action("Index", "Home"); 
            // returns /Manage
            return Content(url);
        }

        public IActionResult GenerateURLOutsideOfArea()
        {
            // Uses the empty value for area
            var url = Url.Action("Index", "Home", new { area = "" }); 
            // returns /Manage/Home/Index
            return Content(url);
        }
    }
}

为什么在GenerateURLInArea()动作中,它返回/Manage而在GenerateURLOutsideOfArea()中,它返回/Manage/Home/Index

1 个答案:

答案 0 :(得分:1)

@itminus突出显示,执行结果相反。我也确认这是真的。

这应该是预期的行为

using Microsoft.AspNetCore.Mvc;

namespace MyApp.Namespace4
{
    [Area("Duck")]
    public class UsersController : Controller
    {
        public IActionResult GenerateURLInArea()
        {
            // Uses the 'ambient' value of area
            var url = Url.Action("Index", "Home"); 
            // returns /Manage/Home/Index
            return Content(url);
        }

        public IActionResult GenerateURLOutsideOfArea()
        {
            // Uses the empty value for area
            var url = Url.Action("Index", "Home", new { area = "" }); 
            // returns /Manage
            return Content(url);
        }
    }
}

这实际上更有意义:)

@itminus也为此修复程序https://github.com/aspnet/AspNetCore.Docs/issues/12221/

提出了要求
相关问题