【问题标题】:Swagger predefined return type values from enum来自枚举的 Swagger 预定义的返回类型值
【发布时间】:2015-05-19 03:40:09
【问题描述】:

我需要能够告诉 Swagger API 文档某个 API 将返回某个枚举的子集。

假设我有一个枚举 UserType { User_Not_Found, User_Blocked, User_Duplicated, User_Active ...等等}。

一个 api/users/search 可能会返回用户 FullName 以防它找到匹配项或“User_Not_Found”以防它没有找到。

return Request.CreateResponse(
       success ? HttpStatusCode.OK : HttpStatusCode.BadRequest, 
       success ? fullName : UserType.User_Not_Found.ToString());

问题:我如何告诉 swagger 在此特定 API 上,如果找到匹配项,则返回可能返回全名,如果未找到匹配项,则返回“User_Not_Found”?

【问题讨论】:

    标签: c# asp.net-mvc swagger swagger-ui


    【解决方案1】:

    您想要做的很像让常规方法根据其执行返回 2 种不同的类型。 这是不可能的

    如果找到用户,我认为您应该使用 HttpStatusCode.OK 返回用户,否则返回包含在响应中的自定义异常,并使用 HttpStatusCode 401、403 或 404(根据您的需要)。这是您可以记录异常并且可以反映在 Swagger UI 中的原因。但是,这 反映 swagger.json 中的枚举。

        try
        {
            if (isUserFound)
            {
                return Request.CreateResponse(HttpStatusCode.OK, user);
            }
            throw new UserNotFoundException("User was not found");
        }
        catch (UserNotFoundException ex)
        {
            return Request.CreateResponse(HttpStatusCode.NotFound, ex);
        }
    

    【讨论】:

    • 我不认为为 UserNotFound 或 UserBlocked 之类的东西引发异常是编写这部分代码的正确方法。另外,我没有返回不同的对象类型,而只是返回不同的字符串值。一个来自数据库,一个来自枚举,以防数据库返回与全名不同的内容
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 2015-10-04
    • 2022-06-11
    • 2016-07-17
    相关资源
    最近更新 更多