首页 > 解决方案 > 通过 httpVerb 属性和“Route”属性进行路由会导致不同的路由吗?

问题描述

我有简单的客户控制器(asp net core 3.0),如下所示:

[ApiController]
[Route("api/v1.0/{controller}")]
public class CustomerController : Controller
{
}

{id}通过[HttpGet]or设置路由令牌有什么区别[Route(...)] ,例如:

    [HttpGet]
    [Route("{id}")]
    public async Task<IActionResult> GetAsync(string id)
    {
       . . .
    }

    [HttpGet("{id}")]
    public async Task<IActionResult> GetAsync(string id)
    {
      . . .
    }

他们会解决类似的路线: api/v1.0/{controller}/{id}

标签: asp.net-coreroutingattributesasp.net-web-api-routing

解决方案


这应该是相同的,来自文档

属性路由也可以使用 Http[Verb] 属性,例如 HttpPostAttribute。所有这些属性都可以接受一个路由模板。

如果[Route(...)]在操作方法上使用,该操作将接受所有 HTTP 方法。所以建议Http*Verb*Attributes在 rest api 中使用更具体的:

在构建 REST API 时,您很少会希望在操作方法上使用 [Route(...)],因为该操作将接受所有 HTTP 方法。最好使用更具体的 Http动词属性来准确了解您的 API 支持什么。REST API 的客户端应该知道哪些路径和 HTTP 动词映射到特定的逻辑操作。


推荐阅读