Swagger - Web API -可选查询参数

7ajki6be  于 2023-10-18  发布在  其他
关注(0)|答案(3)|浏览(107)
[HttpGet]
[Route("students")]
[SwaggerOperation(Tags = new[] { "Student" })]
[SwaggerResponse(HttpStatusCode.OK, Type = typeof(ResponseModel<IList<Student>>))]
[SwaggerResponseExample(HttpStatusCode.OK, typeof(StudentResponseExample))]
[SwaggerResponse(HttpStatusCode.InternalServerError)]
public IHttpActionResult SearchStudent()
    {
        IDictionary<string, string> searchParams = null;
        searchParams = ControllerContext.GetQueryStrings();
        .
        .
        .

    }

上述API有三个可选参数,将作为查询字符串传递
1.同步日期-长
1.偏移-整数
1.限制- int
在swagger UI中,用户没有输入这些可选查询参数的选项。请指导我实现可选的查询参数。
我正在使用swashbuckle,我更喜欢使用注解,而不是在每个API方法上使用冗长的注解部分来实现swagger功能。
我引用了下面的Adding Query String Params to my Swagger Specs,在Web API的Filters文件夹中创建了SwaggerParameterAttribute类,当尝试按照给定的方式在GlobalConfiguration.Configuration .EnableSwagger中添加OperationFilter时,它抛出了type或者找不到命名空间名称SwaggerParametersAttribute。我甚至添加了Filters文件夹命名空间,但仍然存在错误。
请指导如何在swagger中实现可选查询参数

mbzjlibv

mbzjlibv1#

Swagger的工作方式是根据你的Action签名提取参数,也就是Action的参数,但是这里你从ControllerContext中获取这些值,显然Swagger永远不会知道。
因此,您需要更改Action的签名,并将参数传递到那里。
如果你将它们设置为可空类型,它们将被视为可选的-

[HttpGet]
[Route("students")]
[SwaggerOperation(Tags = new[] { "Student" })]
[SwaggerResponse(HttpStatusCode.OK, Type = typeof(ResponseModel<IList<Student>>))]
[SwaggerResponseExample(HttpStatusCode.OK, typeof(StudentResponseExample))]
[SwaggerResponse(HttpStatusCode.InternalServerError)]
public IHttpActionResult SearchStudent(long? SyncDate = null,int? OffSet = null,int? Limit = null)
{
    // Use the variables here
    .
    .
    .

}
7uhlpewt

7uhlpewt2#

这对我很有效:

[System.Web.Http.HttpGet] 
[Route("api/DoStuff/{reqParam}")]  
[Route("api/DoStuff/{reqParam}/{optParam1:alpha?}/{optParam2:datetime?}")]
public string Get(string reqParam, string optParam1= "", string optParam2= "")

它确实在我的Swagger UI中创建了两个部分,但这对我很有效。

lfapxunr

lfapxunr3#

试试这个:

[HttpGet("api/DoStuff/{reqParam}")]
public async Task<IActionResult> Get(string reqParam, string optParam1= "", string optParam2= "")

相关问题