Получить данные из потока, полученного из HttpRequestMessage.Content в WebApi - PullRequest
0 голосов
/ 03 апреля 2019

(подвопрос: Как получить тело из PushStreamContent в WebAPI2?)

Я хочу отправить сжатое сообщение из одного API в другой API.Я делаю это с помощью потокового контента.В настоящее время у меня есть следующая логика:

Логика отправки (с отправкой PushStreamContent через WebAPI2):

private async Task InitPushStreamContent(Stream stream, HttpContent content, TransportContext transportContext)
{
    var tstText = "Testing 1-2-3";

    var byteArray = Encoding.ASCII.GetBytes(tstText);
    await new MemoryStream(byteArray).CopyToAsync(stream);

    stream.Close();
}
public async Task Execute() {
  using (PushStreamContent pushContent = new 
  PushStreamContent(InitPushStreamContent))
  {
    var requestMessage = new HttpRequestMessage
    {
        Content = pushContent
    };
    return await ResendMessagesOtherStage("someParameter", "someParameter",
        "someParameter",
        "someParemeter", requestMessage);
  }
}

Логика получения (Другой API, извлекающий поток):

public async Task<IHttpActionResult> UploadSomethingAsync(HttpRequestMessage request)
{
   var stream = await request.Content.ReadAsStreamAsync();
   var length = (int)stream.Length;
   var byteArray = new byte[length];
   var message = Encoding.ASCII.GetString(byteArray, 0, byteArray.Length);
}

Полученное мной сообщение не является:

"Тестирование 1-2-3"

Но это:

{"Content": {"Headers": [{"Key": "Content-Type", "Value": ["application / octet-stream"]}]}}

Я не уверен, что я наблюдаю ... Те же результаты, которые я получаю, когда извлекаю zip-файл.

1 Ответ

1 голос
/ 15 апреля 2019

Я решил свою проблему, удалив оболочку HttpRequestMessage и изменив получатель HttpClient для отправки запроса методом PostAsync, который принимает HttpContent.Ранее я использовал общий метод SendAsync, который принимает HttpRequestMessage.

Я думаю, что проблема заключалась в том, что при переносе содержимого в объект HttpRequestMessage метод pushStreamContent никогда не вызывался в исходящем запросе.Может быть, HttpRequestMessage не совместим с типом PushStreamContent?

...