在 .NET Core 上,使用System.Net.Http.HttpClient,先调用response.Content.ReadAsStringAsync(),然后调用是否安全response.Content.ReadAsStreamAsync()?
例如,做这样的事情。
var response = await client.GetAsync("http://example.com");
var respStr = await response.Content.ReadAsStringAsync();
// ... Do something with the string
var respStream = await response.Content.ReadAsStreamAsync();
// ... Do something with the stream
Run Code Online (Sandbox Code Playgroud)
我担心响应内容会被传输,因此无法阅读两次。
我已经用几个请求对其进行了测试,它总是对我有用,但它能保证有效吗?
是的,只要内容不被丢弃,它就是安全的。
如果您查看HttpContent类中如何实现这些方法(response.Content返回实例),您将看到内部使用内存缓冲区。
public Task<string> ReadAsStringAsync()
{
CheckDisposed();
return WaitAndReturnAsync(LoadIntoBufferAsync(), this, s => s.ReadBufferedContentAsString());
}
Run Code Online (Sandbox Code Playgroud)
和
public Task<Stream> ReadAsStreamAsync()
{
CheckDisposed();
ArraySegment<byte> buffer;
if (_contentReadStream == null && TryGetBuffer(out buffer))
{
_contentReadStream = Task.FromResult<Stream>(new MemoryStream(buffer.Array, buffer.Offset, buffer.Count, writable: false));
}
if (_contentReadStream != null)
{
return _contentReadStream;
}
_contentReadStream = CreateContentReadStreamAsync();
return _contentReadStream;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2148 次 |
| 最近记录: |