从枚举中获取预定义的返回类型值

本文关键字:返回类型 预定义 获取 枚举 | 更新日期: 2023-09-27 17:49:42

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

假设我有一个enum UserType {User_Not_Found, User_Blocked, user_duplicate, 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"?

从枚举中获取预定义的返回类型值

你想做的很像让一个常规方法根据它的执行返回两种不同的类型。这是不可能的

我认为你应该用HttpStatusCode返回用户。如果找到用户,则返回一个包含HttpStatusCode 401、403或404(基于您想要的)的响应中的自定义异常。这样您就可以记录异常,并且可以在Swagger UI中反映出来。然而,这个并不能反映swagger.json中的Enum。

    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);
    }