Swagger / Swashbuckle显示“未知响应类型”

时间:2018-03-16 00:57:48

标签: swagger swagger-ui swagger-2.0 swashbuckle openapi

我正在创建一个C#ASP.NET Core 2.0 REST API,大部分都运行良好。它使用MVC路由来生成REST API。控制器非常简单。

    // POST: api/Volume/{zoneID}/Set/{volume}
    [HttpPost("{zoneId:int}/[action]/{volume:int}", Name = "Set")]
    public IActionResult Set(int zoneId, int volume)
    {
        return CreateAndSend(strZonesLevel, zoneId, $"{volume:X2}");

    }

使用最新的一切,为AspNetCore 2.3.0安装了Swagger / Swashbuckle,UI提供了API和所有。 SwashBuckle UI运行良好,我可以测试API等。

一个例外是在UI上,响应类型总是以“未知响应类型”的形式返回。

https://i.stack.imgur.com/6qqBh.jpg

我的类前面有以下属性(所有方法都返回相同的类型)

[Produces("application/json")]
[Route("api/Volume")]
[ProducesResponseType(typeof(ControllerResponseModel), 200)]
[ProducesResponseType(typeof(ControllerResponseModel), 400)]
[ProducesResponseType(typeof(ControllerResponseModel), 500)] 

生成的JSON似乎没问题,ControllerResponseModel在定义中,并在Volume API的所有正确位置引用。这是一个子集。

{
  "swagger": "2.0",
  "info": {
    "version": "v1",
    "title": "AVController API"
  },
  "paths": {
    "/api/Volume/{zoneId}/Set/{volume}": {
      "post": {
        "tags": ["Volume"],
        "operationId": "ApiVolumeByZoneIdSetByVolumePost",
        "consumes": [],
        "produces": ["application/json"],
        "parameters": [
          {
            "name": "zoneId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "volume",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "array",
              "items": { "$ref": "#/definitions/ControllerResponseModel" }
            }
          },
          "400": {
            "description": "Bad Request",
            "schema": {
              "type": "array",
              "items": { "$ref": "#/definitions/ControllerResponseModel" }
            }
          },
          "500": {
            "description": "Server Error",
            "schema": {
              "type": "array",
              "items": { "$ref": "#/definitions/ControllerResponseModel" }
            }
          }
        }
      }
    }
  },
  "definitions": {
    "ControllerResponseModel": {
      "type": "object",
      "properties": {
        "command": { "type": "string" },
        "message": { "type": "string" },
        "url": { "type": "string" }
      }
    }
  }
}

为什么UI不会显示返回类型和值的任何想法?我尝试了很多东西,比如使用gets而不是post以及使用[SwaggerResponse]属性,但结果是一样的。

1 个答案:

答案 0 :(得分:0)

这已被确定为Swashbuckle的Edge浏览器问题,而不是此处发布的代码。它在许多站点上都是可重现的。问题发布在GitHub @ https://github.com/swagger-api/swagger-ui/issues/4337