-1

[HttpGet]默认情况下,似乎在 Visual Studio 的自动生成控制器中应用于适当的控制器方法。但是如果我不将它们更改为[HttpGet("[action]").

两者有什么区别(我试图阅读 MS 文档但仍不清楚)?

4

1 回答 1

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将触发适当的操作,因为生成的 url 计算如下,"[controller]" + "[action]" = "[controller]/[action]"

于 2019-04-28T13:13:29.050 回答