首页 文章

Swagger - Web API - 可选的查询参数

提问于
浏览
2
[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有三个可选参数,它们将作为查询字符串传递

  • SyncDate - 长

  • OffSet - int

  • 限制 - 整数

用户无法在swagger UI中输入这些可选查询参数 . 请指导我实现可选的查询参数 .

我使用的是swashbuckle,我更喜欢使用注释,而不是对每个API方法都有冗长的评论部分,以实现swagger功能 .

我引用了以下Adding Query String Params to my Swagger Specs并在Web API的 Filters 文件夹中创建了 SwaggerParameterAttribute 类,当尝试在给定的G lobalConfiguration.Configuration .EnableSwagger 中添加 OperationFilter 时,它会抛出类型或命名空间名称 SwaggerParametersAttributeHandler 找不到 . 我甚至添加了 Filters 文件夹命名空间,但仍然存在错误 .

请指导如何在swagger中实现可选的查询参数

1 回答

  • 2

    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 now here
            .
            .
            .
    
        }
    

相关问题