首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swagger文档中的AutoRest -作为IEnumerable<long?>生成的IEnumerable<long>

Swagger文档中的AutoRest -作为IEnumerable<long?>生成的IEnumerable<long>
EN

Stack Overflow用户
提问于 2016-09-23 00:41:46
回答 1查看 2.2K关注 0票数 4

我有一个使用ASP.NET MVC 5、Swashbuckle和AutoRest的项目。当我使用Autorest为我的API生成客户端时,我的参数将从IEnumerable<long>转换为IEnumerable<long?>

控制器方法

代码语言:javascript
复制
[HttpPost]
public IHttpActionResult Foo([FromBody] IEnumerable<long> ids)
{
    // do work
}

结果AutoRest签名

代码语言:javascript
复制
Task<HttpOperationResponse<IList<ResponseModel>> FoWithMessageAsync(IList<long?> ids, ...)

我试过的

  • 使用Get方法。结果为“多”类型,这是Autorest AutoRest中的已知错误中的一个已知错误。
  • 消除FromBody属性
  • 将IEnumerable包装在自定义模型中

这是一个奇怪的错误,但是我已经使用Swagger和Autorest一段时间了,所以我只能假设它要么是一个模糊的bug/配置(可能),要么我忽略了一些愚蠢的东西(可能)。提前感谢您的帮助。

更新

这是Swashbuckle生成的Swagger Spec

代码语言:javascript
复制
{
    "swagger": "2.0",
    "info": {
        "version": "v1",
        "title": "FooBar",
    },
    "host": "localhost:5000",
    "schemes": [
        "http"
    ],
    "paths": {
        "/api/v1/Foo": {
            "post": {
                "operationId": "foo",
                "consumes": [
                    "application/json",
                    "text/json"
                ],
                "produces": [
                    "application/json",
                    "text/json"
                ],
                "parameters": [
                    {
                        "name": "ids",
                        "in": "body",
                        "description": "",
                        "required": true,
                        "schema": {
                            "type": "array",
                            "items": {
                                "format": "int64",
                                "type": "integer"
                            }
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/Foo"
                            }
                        }
                    },
                    "404": {
                        "description": "NotFound"
                    },
                    "500": {
                        "description": "InternalServerError"
                    }
                },
                "deprecated": false
            }
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2016-11-16 06:01:28

我可以告诉您如何解决Swagger文件中的问题,并使用最新的版本的AutoRest (https://github.com/Azure/autorest),但我对Swashbuckle一无所知,即它是否可以生成以下内容:

代码语言:javascript
复制
"200": {
    "description": "OK",
    "schema": {
        "type": "array",
        "items": {
          "x-nullable": false,
          "type": "integer",
          "format": "int64"
        }
    }
},

注意,我已经写出了一个内联模式,而不是引用"$ref": "#/definitions/Foo"来保持它的简单。重要的是设置"x-nullable": false,它会覆盖默认的为空的行为(预期服务器响应会带来最坏的结果)。在您的示例中,该属性必须添加到引用的模式.../Foo中。

这个特性只有几天的时间了,所以一定要提取最新的AutoRest。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39650892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档