Как сделать так, чтобы Url.Action () распознавал области, определенные в ссылочных библиотеках классов Razor? - PullRequest
0 голосов
/ 29 февраля 2020

В моем ASP. NET Razor базового проекта я использую Url.Action () следующим образом:

@Url.Action("Index", "Foo", new {Area = "MyArea"})

Действие контроллера определено в указанной библиотеке классов Razor, например :

[Route("MyArea/Foo")]
[Authorize]
public class FooController : Controller
{

    [HttpPost]
    public IActionResult Index()
    {
        return Ok();
    }

}

Вернувшись в мой основной проект ASP. NET, в редакторе кода Visual Studio MyArea отображается красным, а всплывающая подсказка гласит: «Не удается разрешить область« MyArea »». И, конечно, мой вызов Url.Action () возвращает string.Empty ....

Но маршрут действителен.

Какие изменения можно применить к любому из моих ASP. NET Базовый проект или ссылка на RCL, чтобы MyArea была распознана как допустимая область, и чтобы вызов Url.Action () возвращал ожидаемый URL?

1 Ответ

0 голосов
/ 29 февраля 2020
[Area("MyArea")]
[Authorize]
public class FooController : Controller
{

    [HttpPost]
    public IActionResult Index()
    {
        return Ok();
    }

}

Области являются другой частью маршрута, так как они названы. Поэтому вы должны использовать [Area()], иначе он не будет знать, что вы запрашиваете для маршрута. По соглашению маршрут Foo уже известен, так как это имя контроллера. Предполагается, что вы правильно сопоставили маршрут в методе Configure() в startup.cs. Это также предполагает, что вы используете папку Area с папкой MyArea.

https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/areas?view=aspnetcore-3.1

...