Короче: измените его на [Route("/products")]
и попробуйте снова.
Подробно:
Если у вас есть атрибут RouteAttribute, примененный к контроллеру или методу действия, то этот метод контролера / действия будет отвечать только на указанный маршрут. В приведенном вами конкретном примере он будет выполняться только при переходе к /~test/65
.
Если вы хотите, чтобы методы контроллера / действия работали с именами по умолчанию, попробуйте использовать флажки [controller]
и [action]
следующим образом:
[Route("[controller]")]
public class ProductsController : Controller
{
[HttpGet("[action]/{id:int}")] // /Products/ById/5
public IActionResult ById(int id)
{
...
}
}
Маршрут по умолчанию в ASP.NET Core - это маршрут, к которому MVC обратится, если ни один из контроллеров не достигнет указанного вами маршрута. В этом случае /Products/ById/5
также сработал бы.
По умолчанию он сопоставляется с контроллером Home
и методом действия Index
, который является домашней страницей по умолчанию. Если маршрут просто /
, то это действие будет выполнено.
Вы также можете сделать это, чтобы просто указать нужный вам маршрут
[Route("/api/products")]
public class ProductsController : Controller
{
[HttpGet("by-id/{id:int}")] // /api/products/by-id/5
public IActionResult ById(int id)
{
...
}
}
Вы также можете попробовать предположение, которое попробовал Джо, так как это тоже метод. Но, в конце концов, вы можете точно настроить маршруты и иметь несколько маршрутов на одном контроллере или действии, если хотите Попробуйте сами поэкспериментировать, но за дополнительной информацией обращайтесь к документации.
Скорее всего, вы не хотите изменять маршрут по умолчанию и настроить свой RouteAttribute по своему вкусу. Прочитайте о атрибутах маршрутизации и маршрутизации к действиям контроллера с помощью app.UseMvc () в предоставленных мною ссылках.