[HttpGet]
似乎在Visual Studio中自动生成的控制器中默认情况下适用于适当的控制器方法。但是如果不将其更改为[HttpGet("[action]")
,则来自Angular的api调用会失败(这是Angular 6 aspnet core 2.x应用程序),并显示400错误。
两者之间有什么区别(我尝试read the MS docs,但仍不清楚)?
答案 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]"
。