带ASPNET核心的Angular-[HttpGet]和[HttpGet(“ [action]”))有什么区别?

时间:2019-04-28 10:20:10

标签: angular asp.net-core

[HttpGet]似乎在Visual Studio中自动生成的控制器中默认情况下适用于适当的控制器方法。但是如果不将其更改为[HttpGet("[action]"),则来自Angular的api调用会失败(这是Angular 6 aspnet core 2.x应用程序),并显示400错误。

两者之间有什么区别(我尝试read the MS docs,但仍不清楚)?

1 个答案:

答案 0 :(得分:1)

[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的请求将执行适当的操作,因为结果网址的计算方式如下,"[controller]" + "[action]" = "[controller]/[action]"