Результат действия Url.Action (), когда область используется в контроллере - PullRequest
0 голосов
/ 30 апреля 2019

Я читаю документацию 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 Ответ

1 голос
/ 02 мая 2019

@ 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/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...