Swagger如何实现相同的路由但不同的查询参数?

21 浏览
0 Comments

Swagger如何实现相同的路由但不同的查询参数?

我创建了一个使用.net5版本的asp.net core web api项目,并且我有一个像这样的路由。

[Route("api/detail")]
public IEnumerable Get()
{
       //TODO
    return users;
}
[Route("api/detail")]
public IEnumerable Get(string name)
{
        //TODO
    return users;
}

尽管我的请求方法相同,请求参数不同,但在swagger中会报500错误。有没有办法解决这个问题?非常感谢任何帮助。

0
0 Comments

Swagger是一个用于构建、文档化和使用RESTful Web服务的强大工具。它提供了一种简单的方法来定义API的结构、传输格式和验证规则,并生成可交互的API文档。然而,有时在使用Swagger时可能会遇到一些问题,比如相同路由但不同查询参数的问题。

在上述内容中,提到了两个问题导致出现500错误的可能原因。第一个问题是没有为每个操作方法添加HttpMethod绑定的装饰器,如[HttpGet]。第二个问题是使用[Route]将两个不同的操作方法绑定到相同的路由和相同的HttpMethod,这在API控制器中是不允许的。

为了解决这些问题,可以采用属性路由与Http动词属性的方法。首先,将路由属性移到控制器上。然后,更新操作方法,删除[Route]属性,替换为[HttpGet]属性,并在第二个端点中添加name参数。同时,建议返回IActionResult

需要注意的是,在Http方法属性中,参数使用大括号{name}进行标识。通过这种方式,两个端点都可以正常工作,并且可以通过Swagger进行访问。

通过上述方法,可以解决Swagger中相同路由但不同查询参数的问题。如果想深入了解可能的路由选项,建议阅读上述提供的链接。

0