两种基于属性的路由方法有什么区别: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 请求。通常,您希望使用特定属性:HttpGet
、HttpPost
等。Route
应该主要用于控制器,以指定该控制器中所有操作的基本路径。一个例外是,如果您正在为异常处理/状态代码页创建路由。然后,您应该对这些操作使用 Route
,因为通过多种方法的请求可能会被路由到那里。
我也有同样的疑问,经过研究,下面是我的理解。我正在标记这个问题以试图确认它:
- HTTP 方法是对特定数据执行的一些操作,可以使用路由检索这些数据。
- 可以对不同的数据(来自一条路由)进行相同的操作,也可以对相同的数据进行不同的操作。
- 但是在控制器中,定义 HTTP 方法应如何应用于数据的方法必须是唯一的。 HTTP 方法/路由的每种组合必须只有一种方法。如果定义了多个方法,那么 HTTP 请求将失败,因为它不知道使用哪个方法。
我在寻找有关基于属性的路由的信息,发现有两种不同的属性可供使用: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 请求。通常,您希望使用特定属性:HttpGet
、HttpPost
等。Route
应该主要用于控制器,以指定该控制器中所有操作的基本路径。一个例外是,如果您正在为异常处理/状态代码页创建路由。然后,您应该对这些操作使用 Route
,因为通过多种方法的请求可能会被路由到那里。
我也有同样的疑问,经过研究,下面是我的理解。我正在标记这个问题以试图确认它:
- HTTP 方法是对特定数据执行的一些操作,可以使用路由检索这些数据。
- 可以对不同的数据(来自一条路由)进行相同的操作,也可以对相同的数据进行不同的操作。
- 但是在控制器中,定义 HTTP 方法应如何应用于数据的方法必须是唯一的。 HTTP 方法/路由的每种组合必须只有一种方法。如果定义了多个方法,那么 HTTP 请求将失败,因为它不知道使用哪个方法。