У меня есть веб-служба API REST, которая действует как промежуточное ПО, которое перенаправляет вызовы на другую службу API REST.
Например, в этом случае я загружаю файл на веб-страницу.И этот веб-сервис получает файлы и отправляет их другому API, который на самом деле обрабатывает файлы.
Это что-то вроде этого:
public async Task<IHttpActionResult> ExecuteFileUpload()
{
IHttpActionResult res;
try
{
var httpRequest = HttpContext.Current.Request;
var requestedFiles = new List<System.IO.Stream>();
var url = "http://localhost:2288" + "/api/v1/templates/upload";
if (httpRequest.Files.Count > 0)
{
HttpFileCollection files = httpRequest.Files;
using (var content = new MultipartFormDataContent())
{
int index = 0;
foreach (var file in httpRequest.Files)
{
var postedFile = httpRequest.Files[index];
var fileName = postedFile.FileName;
var fileInMemory = postedFile.InputStream;
content.Add(new StreamContent(fileInMemory), "f" + index, fileName);
index++;
}
res = await ForwardPost(url, content);
}
}
else
res = BadRequest();
}
catch (Exception ex)
{
res = InternalServerError(ex);
}
return res;
}
Функция пересылки сообщений очень проста:
protected async Task<IHttpActionResult> ForwardPost(string url, MultipartFormDataContent forwardContent)
{
IHttpActionResult res;
using (var client = CreateClient())
{
using (var response = await client.PostAsync(url, forwardContent))
{
if (response.StatusCode == HttpStatusCode.OK)
{
var content = await response.Content.ReadAsAsync<JToken>();
res = Ok(content);
}
else
{
res = InternalServerError();
}
}
return res;
}
}
Как вы можете видеть, я просто хочу переслать все, что было передано мне с веб-страницы, и переслать его фактическому REST API, который обрабатывает это.
Однако это вызывает исключение дляэта строка:
response = await client.PostAsync(url, forwardContent)
Выдает исключение System.IO.IOException
Невозможно закрыть поток, пока не будут записаны все байты.
Почему этодело?Есть ли способ решить эту проблему?