【问题标题】:Result of Url.Action() when Area is used in Controller在 Controller 中使用 Area 时 Url.Action() 的结果
【发布时间】:2019-04-30 01:39:27
【问题描述】:

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

有一部分我看不懂。

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

【问题讨论】:

  • 请用文字而不是图片发布代码
  • @Dani 更新为文字
  • @muhihsan 我遵循示例但得到相反的结果。你得到和我一样的结果吗?
  • @itminus 我刚刚尝试过,确实我得到了相反的结果。那是有道理的。谢谢!

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


【解决方案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/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-09
    • 2016-12-22
    • 2014-08-03
    • 1970-01-01
    • 2016-11-14
    • 2014-01-11
    • 2018-06-04
    • 2019-01-10
    相关资源
    最近更新 更多