C#招摇过市+;自动测试-如何发送流体?
我认为这是一个非常典型的场景:我们的解决方案公开了一个由asp核心C#控制器构建的API,我们从中生成一个swagger.json(使用) 我们通过使用AutoRest()生成的C#客户机在代码中调用此api 为了执行一个潜在的大型上传,我们希望使用我们的AutoRest生成的客户端将一个流从C#调用者传递到后端,以避免必须序列化/反序列化一个完整的对象 我不知道如何将这两个工具结合使用,通过来自c#代码的调用传入流。我尝试将其添加为参数,但这会导致AutoRest为System.IO.Stream创建一个“Stream”模型,然后将其用作输入参数的类型,而不是仅保留原始类型。我尝试将其作为[FromBody]参数传入,但除了上述问题之外,AutoRest还将其作为StringContent键入,然后再将其添加到请求中,而不是StreamContent(可能是因为SwaggerGen没有将其标识为流?)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
如果您能提供任何建议,我们将不胜感激。但如果我们不能做到这一点,我想我们总是可以手动使用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模型发生更改,我们需要手动更新手动生成的方法
- 任何模拟系统的人都需要知道,我们的代码使用的是接受流的方法,而不是自动生成的方法