两种基于属性的路由方法有什么区别:HttpGet("") 和 Route("")?

What's the difference between two attribute-based routing approaches: HttpGet("") and Route("")?

我在寻找有关基于属性的路由的信息,发现有两种不同的属性可供使用:HttpGet("")Route("")。但是,我找不到任何关于它们之间区别的信息。

其中之一是为了支持旧的 ASP 版本,还是有不同的原因?

P.S。我的代码可能不完全正确,因为我才刚刚开始学习ASP。如果有什么不清楚的地方,我会尽力解释。

public class MyController : Controller
{
    // APPROACH 1
    [Route("api/books")]
    [HttpGet]
    public async List<Book> GetBooks() 
    {
        // Implementation
    }

    // APPROACH 2
    [HttpGet("api/books")]
    public async List<Book> GetBooks()
    {
        // Implementation
    }
}

Route 是方法不明确的,而 HttpGet 显然意味着只接受 GET 请求。通常,您希望使用特定属性:HttpGetHttpPost 等。Route 应该主要用于控制器,以指定该控制器中所有操作的基本路径。一个例外是,如果您正在为异常处理/状态代码页创建路由。然后,您应该对这些操作使用 Route,因为通过多种方法的请求可能会被路由到那里。

我也有同样的疑问,经过研究,下面是我的理解。我正在标记这个问题以试图确认它:

  1. HTTP 方法是对特定数据执行的一些操作,可以使用路由检索这些数据。
  2. 可以对不同的数据(来自一条路由)进行相同的操作,也可以对相同的数据进行不同的操作。
  3. 但是在控制器中,定义 HTTP 方法应如何应用于数据的方法必须是唯一的。 HTTP 方法/路由的每种组合必须只有一种方法。如果定义了多个方法,那么 HTTP 请求将失败,因为它不知道使用哪个方法。