C# 将文件数据从一个Web Api转发到另一个Web Api
我有一个winform应用程序,我在其中调用一个webapi,inturns在web上调用另一个公共API。 winform上载一个文件,并将该文件传递给临时WebAPI,后者将该文件进一步传递给另一个面向公众的API进行进一步处理 我不想做的就是将文件中的任何数据以任何形式持久化到我的webAPI中。 到目前为止,我已经做到了这一点。 我正在使用Restsharp打电话C# 将文件数据从一个Web Api转发到另一个Web Api,c#,multipartform-data,asp.net-web-api2,restsharp,C#,Multipartform Data,Asp.net Web Api2,Restsharp,我有一个winform应用程序,我在其中调用一个webapi,inturns在web上调用另一个公共API。 winform上载一个文件,并将该文件传递给临时WebAPI,后者将该文件进一步传递给另一个面向公众的API进行进一步处理 我不想做的就是将文件中的任何数据以任何形式持久化到我的webAPI中。 到目前为止,我已经做到了这一点。 我正在使用Restsharp打电话 public async Task<HttpResponseMessage> Post()
public async Task<HttpResponseMessage> Post()
{
if (!Request.Content.IsMimeMultipartContent())
throw new Exception();
var provider = new MultipartMemoryStreamProvider();
await Request.Content.ReadAsMultipartAsync(provider);
var file = provider.Contents.First();
var fileName = file.Headers.ContentDisposition.FileName.Trim('\"');
//Rest call to my Public API
var publicAPIRsult = Client.CallMYpublicAPI(await file.ReadAsByteArrayAsync(), fileName);
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, publicAPIRsult.Content.ToString());
return response;
}
有没有更好的方法打这个电话?
我在这段代码中得到的代码审查反馈是,它将占用大量内存,并且应该直接将数据传递给API调用,而不是从响应中读取数据,然后将其传递
有什么改进建议吗?我尝试混合使用自定义MultipartStreamProvider和PushStreamContent,但成功率非常有限。还必须处理自定义IHostBufferPolicySelector,以防止传入请求内容被缓冲,如下所述:。在相对较小的200mb文件上仍然出现OutOfMemoryException,因此某些设置肯定不正确。您解决了此问题吗?