Рассмотрим свежее веб-приложение Asp.Net Core 2.1 MVC, созданное с помощью шаблона Visual Studio 2017.Теперь рассмотрим пользовательское представление (MyView), а также контроллер (ActualController), чтобы структура проекта выглядела так, как показано на рисунке:
![enter image description here](https://i.stack.imgur.com/pOvGH.png)
The MyView
ничего особенного не показывает, и это неуместно.Однако страница должна появиться, когда пользователь вводит URL-адрес, например http://(domain)/desired/myview, или также через гиперссылку на домашней странице:
<a asp-area="" asp-controller="Desired" asp-action="MyView">MyView</a>
Теперь давайте сосредоточимся на контроллере, который является классом назван по-другому от того, что ожидает маршрутизация:
[Route("desired")]
public class ActualController : Controller
{
[Route("MyView")] //without this the method won't be called
public IActionResult MyView()
{
return this.View();
}
}
Из того, что я знаю, путем украшения контроллера атрибутом Route
указывается распознаватель URL, чтобы соответствовать этому классу.Однако отображение работает только в том случае, если я явно добавлю (избыточный) атрибут Route
в целевой метод / действие.Если я его удалю, путь не будет найден, и сервер вернет ошибку 404.
Вопрос в том, почему необходимо обязательно украшать Route
метод, даже если действие неявноопределяется именем метода (как обычно)?
ПРИМЕЧАНИЕ: мне довольно просто переименовать класс контроллера, но я хотел бы знать, каковы причины такого поведения.