Swashbuckle Swagger:如何显示模型数组参数类型?

时间:2018-04-10 05:53:58

标签: asp.net-core swagger swashbuckle

我正在使用https://github.com/domaindrivendev/Swashbuckle.AspNetCore的最新2.4版本来生成具有2个参数的AspNetCore Controller方法的文档:guid和模型列表。

[HttpPost("MyMethod/{ReferenceId}")]
public async Task<IActionResult> MyMethod(Guid referenceId, List<ApiProfile> passengers)

第一个参数生成正确,但第二个参数不理解类型,只显示数组(无类型)

Passengers
array
(query)

在json:

"parameters": [
    {
        "name": "passengers",
        "in": "query",
        "description": "",
        "required": false,
        "type": "array",
        "items": {},
        "collectionFormat": "multi"
    },

请注意,ApiProfile类型显示在“模型”部分的底部:

ApiProfile {
    description:    API Object
    Id  string($uuid)
    Email   string
    salutation  string
    firstName   string
    lastName    string
    dateOfBirth string($date-time)
}

在json:

"definitions": {
    "ApiProfile": {
        "description": "API Object",
        "type": "object",    
        "properties": {"Id": {"format": "uuid","type": "string"},
        "Email": {"type": "string"},
        "salutation": {"type": "string"},
        "firstName": {"type": "string"}
...

我需要一个建议如何描述要在Swagger UI中显示的请求参数列表的类型。

我尝试分配[SwaggerRequestExample(typeof(PeopleRequest),typeof(ListPeopleRequestExample))],但不确定如何使用2个参数。 我也尝试暂时排除第一个参数,但行为相同。

更新:我创建了一个最小版本,但行为相同。

  [Route("[controller]")]
    public class SwashbuckleTest : Controller
    {
         [HttpPost]
        [Route("{id}")]
        public SwashbuckleTestProfile Post(Guid id, List<SwashbuckleTestProfile> companies)
        {
            return companies.FirstOrDefault();
        }
    }
    public class SwashbuckleTestProfile
    {

        public string Email { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }

可以从https://github.com/MNF/Samples/tree/master/SwashbuckleExample

加载完整示例

1 个答案:

答案 0 :(得分:2)

你不应该做任何特别的事情或描述任何事情。
Swashbuckle应该照顾... 闻起来像一个bug

我测试了与我的项目Swagger-Net类似的东西,它渲染得很好:
http://swagger-net-test.azurewebsites.net/swagger/ui/index?filter=MultiParam#/MultiParamPost/MultiParamPost_Post

    [Route("{id}")]
    public Company Post(Guid id, List<Company> companies)
    {
        return companies.FirstOrDefault();
    }

以下是代码输出的相关JSON:

      {
        "name": "companies",
        "in": "body",
        "required": true,
        "schema": {
          "items": {
            "$ref": "#/definitions/Company"
          },
          "xml": {
            "name": "Company",
            "wrapped": true
          },
          "type": "array"
        }
      }

我想如果你真的想要获得Swashbuckle,你可以使用IDocumentFilter并将模式更改为更像我的模式。

更新在使用提供的最小版本播放后,似乎添加[FromBody]会对Swashbuckle.AspNetCore中的架构进行重大更改

    [Route("{id}")]
    public Company Post(Guid id, [FromBody]List<Company> companies)