Open APISwagger路由命名约定

问题描述

我在项目中使用Swagger,我想知道正确的路由命名约定是什么。另一方面,我通过使用方法名称使用以下命名约定,但是我不确定这是否是一种好习惯。在此示例中,我没有遵循任何约定,只是尝试使用方法名称,以便对API页面进行解释。

请注意,当我仅对[HttpGet][HttpGet("{id}")]方法使用GetGetById时,会遇到类似两次使用相同名称错误。因此,我必须额外使用路由注释。解决此问题的正确方法是什么?

[HttpGet,Route("get")]
public IEnumerable<DemoDto> Get()
{
    //
}

[HttpGet,Route("getById/{id}")]
public DemoDto GetById(int id)
{
    //
}

[HttpGet,Route("getWithPagination/{query}")]
public ActionResult<PaginatedList<DemoDto>> GetWithPagination([FromQuery] GetPublishersWithPaginationQuery query)        
{
    //
}

[HttpPost,Route("create/{command}")]
public int Create(Command command)
{
    //
}

[HttpPut,Route("update/{id}")]
public ActionResult Update(int id)
{
    //
}

[HttpDelete,Route("delete/{id}")]
public ActionResult Delete(int id)
{
    //
}

解决方法

通常,我会遵循该语言的命名约定,并且该语言的创建者提供了有关其使用方式的文档,因此您与社区的其余部分保持一致。在这种情况下,these是Microsoft针对C#记录的内容。

对于路由的其他问题,通常我看到的是attribute routing,这就是您正在使用的。我还没有尝试过HttpGet("{id}"),因为我最终会做HttpGet,Route("{id}")

我认为您拥有的是好的做法。您总是可以询问团队负责人是否有采用的命名习惯,或者浏览存储库中的其他项目以查看是否已经建立了命名约定。