C#招摇过市+;自动测试-如何发送流体?

C#招摇过市+;自动测试-如何发送流体?,c#,asp.net-mvc,swagger-codegen,autorest,C#,Asp.net Mvc,Swagger Codegen,Autorest,我认为这是一个非常典型的场景:我们的解决方案公开了一个由asp核心C#控制器构建的API,我们从中生成一个swagger.json(使用) 我们通过使用AutoRest()生成的C#客户机在代码中调用此api 为了执行一个潜在的大型上传,我们希望使用我们的AutoRest生成的客户端将一个流从C#调用者传递到后端,以避免必须序列化/反序列化一个完整的对象 我不知道如何将这两个工具结合使用,通过来自c#代码的调用传入流。我尝试将其添加为参数,但这会导致AutoRest为System.IO.Stre

我认为这是一个非常典型的场景:我们的解决方案公开了一个由asp核心C#控制器构建的API,我们从中生成一个swagger.json(使用)

我们通过使用AutoRest()生成的C#客户机在代码中调用此api

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

我不知道如何将这两个工具结合使用,通过来自c#代码的调用传入流。我尝试将其添加为参数,但这会导致AutoRest为System.IO.Stream创建一个“Stream”模型,然后将其用作输入参数的类型,而不是仅保留原始类型。我尝试将其作为[FromBody]参数传入,但除了上述问题之外,AutoRest还将其作为StringContent键入,然后再将其添加到请求中,而不是StreamContent(可能是因为SwaggerGen没有将其标识为流?)


如果您能提供任何建议,我们将不胜感激。但如果我们不能做到这一点,我想我们总是可以手动使用HTTPClient。

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

  • 我们的Swagger模型不接受流(我们仍然使用流,我们只是直接从控制器内的AspNetCore请求获取它。我们有一个自定义验证器,确保流存在并且长度非零)
  • 我们创建了一个分部类,与自动生成的api客户端一起使用
  • 我们采用了需要接受流的方法,并从自动生成的api客户端逐字复制它,然后将其放入新的分部类中
  • 我们修改了自动生成的代码的方法以接收流
  • 我们修改了自动生成的代码,添加了以下内容:

            // BEGIN MANUALLY MODIFIED CODE
        _httpRequest.Content = new StreamContent(inputStream);
        // ensure that Expect Continue behaviour is always used for binary submissions
        _httpRequest.Headers.ExpectContinue = true;
        // END MANUALLY MODIFIED CODE 
    
现在,我们只对该端点的所有调用使用这个手动生成的方法,而不是自动生成的方法。这有几个重要的注意事项:

  • 如果Swagger模型发生更改,我们需要手动更新手动生成的方法
  • 任何模拟系统的人都需要知道,我们的代码使用的是接受流的方法,而不是自动生成的方法

这是一个很老的问题,但你有没有试过让它“正常”运行呢?@rumblefx0-我不再参与这个项目了,但我只是快速浏览了一下公共托管的回购协议,黑客仍然存在。这里有一条注释,需要重新访问Swagger 3.0.Thnx的黑客程序。为了找到答案,我们将找出一些解决方法……:)