Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 开放式API(招摇过市)路由命名约定_C#_Asp.net Core_.net Core_Swagger_Openapi - Fatal编程技术网

C# 开放式API(招摇过市)路由命名约定

C# 开放式API(招摇过市)路由命名约定,c#,asp.net-core,.net-core,swagger,openapi,C#,Asp.net Core,.net Core,Swagger,Openapi,我在一个项目中使用了Swagger,我想知道什么是正确的路由命名约定。另一方面,我通过使用方法名使用以下命名约定,但我不确定这是否是一个好的实践。在本例中,我不遵循任何约定,只是尝试使用方法名称,以便对API页面进行解释 请注意,当我对Get和GetById方法使用[HttpGet]和[HttpGet({id}”)]时,我会遇到类似两次使用相同名称的错误。由于这个原因,我不得不使用管线注释作为额外的注释。关于这个问题,正确的方法是什么 [HttpGet, Route("get"

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

请注意,当我对
Get
GetById
方法使用
[HttpGet]
[HttpGet({id}”)]
时,我会遇到类似两次使用相同名称的错误。由于这个原因,我不得不使用管线注释作为额外的注释。关于这个问题,正确的方法是什么

[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)
{
    //
}
[HttpGet,Route(“get”)]
公共IEnumerable Get()
{
//
}
[HttpGet,Route(“getById/{id}”)]
对GetById(int-id)的公共请求
{
//
}
[HttpGet,Route(“getWithPagination/{query}”)]
公共操作结果GetWithPagination([FromQuery]GetPublisherWithPaginationQuery查询)
{
//
}
[HttpPost,路由(“创建/{command}”)]
公共int创建(命令)
{
//
}
[HttpPut,Route(“update/{id}”)]
公共操作结果更新(int id)
{
//
}
[HttpDelete,路由(“delete/{id}”)]
公共操作结果删除(int id)
{
//
}

一般来说,我会遵循该语言的命名约定,并且该语言的创建者提供了关于他们使用什么的文档,因此您与社区的其他人保持一致。在本例中,是Microsoft为C#编写的文档

关于路由的另一个问题,通常我看到的是,您正在使用的。我没有尝试过
HttpGet(“{id}”)
,因为我会像您那样使用
HttpGet,Route({id}”)
来完成


我认为你的做法很好。您可以随时询问您的团队负责人是否有已采用的命名实践,或者查看存储库中的其他项目,看看是否已经有了一个已建立的命名约定。

非常感谢您的有用解释#1正如您所建议的,我还遵循相关技术页面中的命名约定。但这一次,它也与招摇过市有关,根据我的搜索,似乎没有合适的页面#2您的属性路由链接也非常有用。但我不确定
[Route(“api/books/{id}”,Name=“GetBookById”)]
是否最适合我的情况(也许使用此注释,我可以在Name参数中使用相同的方法名称。#3没有团队领导对此问题有经验,这就是为什么我问你:)因此,我的使用可能不是一个好的做法。因为我使用方法名作为api参数。因此,我是否应该遵循类似于
[Route(“api/books/{id}”,Name=“GetBookById”)]
的方法?这只是我个人的经验,但我想说的是,在路由方面,您可以通过添加名称来改进,以便更容易区分,或者如果您需要元数据。在我的公司,我们也没有将其标准化,因此一些路线有
Name=blahblah
,而其他路线没有,因此没有多大区别。写下你觉得舒服的东西,如果你对它感觉很强烈,看看你是否可以写一个标准。只要没有任何明显奇怪的语法,我的团队关注的是结果而不是代码的风格。