HttpResponseMessage 你处理了吗?

Posted

技术标签:

【中文标题】HttpResponseMessage 你处理了吗?【英文标题】:HttpResponseMessage do you dispose it? 【发布时间】:2018-05-30 08:02:50 【问题描述】:

在等待新的闪亮HttpClientFactory解决HttpClient的所有问题的同时,

我仍然找不到是否应该处理 HttpResponseMessageHttpRequestMessage 的答案。

下面这样的做法是一种好的做法吗?

您是否在 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 不同样不适用于HttpRequestMessageHttpResponseMessage。您可以安全地处理请求和响应消息。 感谢有道理

以上是关于HttpResponseMessage 你处理了吗?的主要内容,如果未能解决你的问题,请参考以下文章

HttpResponseMessage 的处理是调用请求流的处理

这些处理线上故障的技巧你掌握了吗?

在调用ReadAsStreamAsync时何时或何时调用HttpResponseMessage?

jQuery 的58种事件方法你都用过了吗

你今天Restful了吗?

如果 Task<HttpResponseMessage>.IsCompleted 为真,为啥 Task<HttpResponseMessage>.Result 会抛出异常?