HttpResponseMessage 你处理了吗?
Posted
技术标签:
【中文标题】HttpResponseMessage 你处理了吗?【英文标题】:HttpResponseMessage do you dispose it? 【发布时间】:2018-05-30 08:02:50 【问题描述】:在等待新的闪亮HttpClientFactory
解决HttpClient
的所有问题的同时,
我仍然找不到是否应该处理 HttpResponseMessage
和 HttpRequestMessage
的答案。
下面这样的做法是一种好的做法吗?
您是否在 HttpResponseMessage
中使用了 Using 语句?
//httpClient has been injected
using (HttpResponseMessage messageResponse = await httpClient.GetAsync(uri, cancellationToken).ConfigureAwait(false))
using (HttpContent content = messageResponse.Content)
if (messageResponse.IsSuccessStatusCode)
var json = await content.ReadAsStringAsync();
var response = await Task.Run(() => JsonConvert.DeserializeObject<TResponse>(json, serializerSettings));
return new MyWrapperResponse<TResponse>(messageResponse,response);
【问题讨论】:
【参考方案1】:您是否在 HttpResponseMessage 中使用 Using 语句?
简短回答:可以。
下面这样的做法是一种好的做法吗?
视情况而定。
虽然通常建议练习用using
包装IDisposable
派生类以进行正确处理,但显示的示例可能使用不正确。
messageResponse
被注入到包装类 (MyWrapperResponse
) 中,然后函数立即返回。如果响应消息在该包装器的构造函数之外使用,则响应可能已经被释放。
【讨论】:
您好,感谢您的回复。这个问题的原因是因为当前形式的 HttpClient 即使实现了 IDisposible 也不应该被释放,想知道这是否同样适用于 HttpResponseMessage @developer9969 不同样不适用于HttpRequestMessage
和HttpResponseMessage
。您可以安全地处理请求和响应消息。
感谢有道理以上是关于HttpResponseMessage 你处理了吗?的主要内容,如果未能解决你的问题,请参考以下文章
HttpResponseMessage 的处理是调用请求流的处理
在调用ReadAsStreamAsync时何时或何时调用HttpResponseMessage?
如果 Task<HttpResponseMessage>.IsCompleted 为真,为啥 Task<HttpResponseMessage>.Result 会抛出异常?