首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# SwaggerGen + AutoRest -如何发送流体?

C# SwaggerGen + AutoRest -如何发送流体?
EN

Stack Overflow用户
提问于 2018-02-16 07:15:13
回答 1查看 1K关注 0票数 3

我认为这是一个非常典型的场景:我们的解决方案公开了一个由asp核心C#控制器构造的API,我们从该控制器生成一个swagger.json (使用https://github.com/domaindrivendev/Swashbuckle.AspNetCore)。

我们通过使用C# ( AutoRest,https://github.com/Azure/autorest)生成的AutoRest客户机在代码中调用这个api。

为了执行潜在的大规模上传,我们希望使用AutoRest生成的客户端将流从C#调用方传递到后端,以避免序列化/反序列化完整对象。

我想不出如何使用这两个工具一起传递一个流,并调用我们的c#代码。我尝试将它作为参数添加,但是这会导致AutoRest为System.IO.Stream创建一个"Stream“模型,然后将其用作输入参数的类型,而不是只保留原始类型。我尝试将其作为FromBody参数传入,但除了上面的问题外,AutoRest还在将其添加到请求之前将其输入为StringContent,而不是StreamContent (可能是因为SwaggerGen没有将其标识为流?)。

如果我们不能做到这一点,我们总是可以手动使用HTTPClient,我想。

EN

回答 1

Stack Overflow用户

发布于 2018-09-12 04:20:09

我们无法解决这个问题,最终得到了一个不太理想的解决方案,这个解决方案(对我们来说)仍然比手动生成的HTTPClient更可取。

  • 我们的Swagger模型不接受流(我们仍然使用流,我们只是直接从控制器内的AspNetCore请求获得它。我们有一个自定义验证器,它确保流存在并且具有非零长度)
  • 我们创建了一个部分类,与我们自动生成的api客户端一起使用。
  • 我们采用了需要接受流的方法,并从自动生成的api客户端逐字复制它,并将其放入我们的新的分部类中。
  • 我们修改了自动生成代码的方法以接受流
  • 我们修改了自动生成的代码,并添加了以下内容: // BEGIN手动修改代码_httpRequest.Content =新StreamContent(inputStream);//确保Expect继续行为始终用于二进制提交( _httpRequest.Headers.ExpectContinue =true);// END手动修改代码

现在,我们只对该端点的所有调用使用这个手动生成的方法,而不是自动生成的方法。这附带了几个重要的警告:

  • 如果Swagger模型发生变化,则需要手动更新手动生成的方法
  • 任何模拟系统的人都需要知道,我们的代码使用的是接受流的方法,而不是自动生成的方法。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48821782

复制
相关文章

相似问题

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