Угловой с ядром Aspnet - В чем разница между [HttpGet] и [HttpGet ("[действие]")? - PullRequest
0 голосов
/ 28 апреля 2019

[HttpGet], по-видимому, применяется к соответствующим методам контроллера по умолчанию в автоматически сгенерированных контроллерах в Visual Studio.Но вызовы API из Angular терпят неудачу (это приложение Angular 6 aspnet core 2.x) с ошибкой 400, если я не изменю их на [HttpGet("[action]").

В чем разница между этими двумя (я пытался прочитать документы MS , но все еще неясно)?

1 Ответ

1 голос
/ 28 апреля 2019
[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]".

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