两种基于属性的路由方法HttpGet(“”)和Route(“”)之间有什么区别?

时间:2018-07-10 11:33:49

标签: c# asp.net asp.net-core network-programming

我试图查找有关属性路由的信息,发现有两种实现方式,但是我找不到任何区别。 是否由于支持旧版本或其他功能而存在它们? 谢谢!

p.s。代码可能不是很准确,因为我刚刚开始学习ASP。 p.p.s.如果不清楚,我将尝试解释。

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
    }
}

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我也有同样的问题,经过一些研究后,我的理解如下。我正在标记这个问题试图确认它:

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