[HttpGet("[action]")]
public IActionResult Action()
эквивалентно
[HttpGet]
[Route("[action]")]
public IActionResult Action()
Таким образом, разница в том, что [HttpGet]
требует пустую часть маршрута для соответствия этому действию, а [HttpGet("[action]")]
требует имя действия, чтобы соответствовать действию. Например
[Route("[controller]")]
public class ProductsController : Controller
{
[HttpGet]
public IActionResult List() { }
}
Запрос на /Products
приведет к действию List
, поскольку полученный маршрут рассчитывается путем объединения значений контроллера и действия [Route]
(и объединения их с /
). В этом примере это "[controller]" + "" = "[controller]"
. В этом примере
[Route("[controller]")]
public class ProductsController : Controller
{
[HttpGet("[action]")]
public IActionResult List() { }
}
В этом случае запрос к /Products/List
выполнит соответствующее действие, поскольку результирующий URL рассчитывается следующим образом: "[controller]" + "[action]" = "[controller]/[action]"
.