У меня есть приложение winform, откуда я звоню в webapi, который вызывает вызовы другого публичного API в Интернете. Winform загружает файл и передает файл во временный WebAPI, который далее передает его другому публичному API-интерфейсу для дальнейшей обработки.Переслать данные файла из одного веб-Api в другой веб-Api
Все, что я не хочу делать, это сохранить любые данные из файла в anyform в моем webAPI. Вот где я дошел до сих пор. Я использую Restsharp для совершения звонков.
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, чтобы предотвратить буферизацию содержимого входящего запроса (как описано здесь: http://www.strathweb.com/2012/09/dealing-with-large-files-in-asp -сетью-веб-апи /). Все закончилось с OutOfMemoryException относительно относительно небольших файлов (200mb), поэтому что-то определенно не настроено правильно. – Bredstik
Вы решили эту проблему? – Ajinkya