【发布时间】:2016-06-11 02:11:40
【问题描述】:
我试图在 asp.net core 1.0 中获取 Request.Body 的原始内容,我想知道将整个身体作为 byte[] 的正确方法是什么。如果您有任何类似情况的经验并且知道“正确”的做法,请分享。
【问题讨论】:
标签: c# model-view-controller asp.net-core
我试图在 asp.net core 1.0 中获取 Request.Body 的原始内容,我想知道将整个身体作为 byte[] 的正确方法是什么。如果您有任何类似情况的经验并且知道“正确”的做法,请分享。
【问题讨论】:
标签: c# model-view-controller asp.net-core
我使用了这个代码...
using (var requestBodyStream = new MemoryStream())
{
var body = request.Body;
await request.Body.CopyToAsync(requestBodyStream);
requestBodyStream.Seek(0, SeekOrigin.Begin);
requestPayload.Body = await new StreamReader(requestBodyStream).ReadToEndAsync();
}
【讨论】:
Request.Body 是一个流。该流具有Read 方法,该方法采用一个缓冲区,该缓冲区是一个字节数组,您可以将数据读入其中。由于您可能不知道流的大小,甚至不是所有内容都可用,因此您需要在循环中执行此操作,直到您从流中读取所有数据 - this stackoverflow 答案显示了如何执行此操作(如果您不想阻塞你的线程可以使用 ReadAsync)。或者 - 如果您想将内容读取到字符串,您可以使用 StreamReader 类。
【讨论】: