[HttpGet]默认情况下,似乎在 Visual Studio 的自动生成控制器中应用于适当的控制器方法。但是如果我不将它们更改为[HttpGet("[action]").
两者有什么区别(我试图阅读 MS 文档但仍不清楚)?
[HttpGet]默认情况下,似乎在 Visual Studio 的自动生成控制器中应用于适当的控制器方法。但是如果我不将它们更改为[HttpGet("[action]").
两者有什么区别(我试图阅读 MS 文档但仍不清楚)?
[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]"。