从 WebApi 中的 HttpRequestMessage.Content 检索的流中检索数据
Retrieve data from a stream retrieved from HttpRequestMessage.Content in WebApi
(子问题:如何从 WebAPI2 中的 PushStreamContent 中检索正文?)
我想从一个 API 向另一个 API 发送一条压缩消息。我通过流式传输内容来做到这一点。我目前有以下逻辑:
发送逻辑(通过 Web 发送 PushStreamContentAPI2):
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);
}
The message I retrieve is not:
"Testing 1-2-3"
但是是:
{"Content":{"Headers":[{"Key":"Content-Type","Value":["application/octet-stream"]}]}}
我不确定我在监督什么...我在检索 zip 文件时得到的结果相同。
我通过删除 HttpRequestMessage 包装器并更改 HttpClient 接收器以使用接受 HttpContent 的 PostAsync 方法发送请求来解决我的问题。
我以前使用接受 HttpRequestMessage 的通用 SendAsync 方法。
我认为问题在于,通过将内容包装在 HttpRequestMessage 对象中,传出请求中从未触发 pushStreamContent 的方法。也许 HttpRequestMessage 与 PushStreamContent 类型不兼容?
(子问题:如何从 WebAPI2 中的 PushStreamContent 中检索正文?)
我想从一个 API 向另一个 API 发送一条压缩消息。我通过流式传输内容来做到这一点。我目前有以下逻辑:
发送逻辑(通过 Web 发送 PushStreamContentAPI2):
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);
}
The message I retrieve is not:
"Testing 1-2-3"
但是是:
{"Content":{"Headers":[{"Key":"Content-Type","Value":["application/octet-stream"]}]}}
我不确定我在监督什么...我在检索 zip 文件时得到的结果相同。
我通过删除 HttpRequestMessage 包装器并更改 HttpClient 接收器以使用接受 HttpContent 的 PostAsync 方法发送请求来解决我的问题。 我以前使用接受 HttpRequestMessage 的通用 SendAsync 方法。
我认为问题在于,通过将内容包装在 HttpRequestMessage 对象中,传出请求中从未触发 pushStreamContent 的方法。也许 HttpRequestMessage 与 PushStreamContent 类型不兼容?