从WebApi中的HttpRequestMessage.Content检索的流中检索数据

时间:2019-04-03 07:54:24

标签: c# asp.net-web-api2

(子问题:如何从WebAPI2中的PushStreamContent检索正文?)

我想将压缩的消息从一个API发送到另一个API。我通过流内容来做到这一点。我目前有以下逻辑:

发送逻辑(通过WebAPI2发送PushStreamContent):

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 个答案:

答案 0 :(得分:1)

我通过删除HttpRequestMessage包装器并更改HttpClient接收器以使用接受HttpContent的PostAsync方法发送请求来解决了我的问题。 我以前使用过通用的SendAsync方法,该方法接受HttpRequestMessage。

我认为问题在于,通过将内容包装在HttpRequestMessage对象中,pushStreamContent的方法从未在传出请求中触发。也许HttpRequestMessage与PushStreamContent类型不兼容?