HttpResponseMessage怎么处理?

9

在等待新的闪亮的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个回答

2

您是否在HttpResponseMessage中使用Using语句?

简短回答:可以。

像下面这样的做法是否是一个好习惯?

这取决于情况。

尽管通常建议使用using来正确处理IDisposable派生类,但所示的示例可能使用不正确。

messageResponse被注入到一个包装器类(MyWrapperResponse)中,然后函数立即返回。如果响应消息在该包装器的构造函数之外被使用,则可能已经被处理掉了。


嗨,感谢您的回复。我提出这个问题的原因是因为HttpClient在其当前形式下,即使它实现了IDisposable接口,也不应该被处理,想知道同样的情况是否适用于HttpResponseMessage。 - developer9969
@developer9969 不,这并不适用于 HttpRequestMessageHttpResponseMessage。您可以安全地处理请求和响应消息。 - Nkosi
感谢,很有道理。 - developer9969

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接