HttpResponseMessage 你处理了吗?

dev*_*969 5 c# dotnet-httpclient asp.net-web-api2 asp.net-core-webapi

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

我仍然无法找到是否HttpResponseMessageHttpRequestMessage应该处置的答案。

像下面这样的东西是一种很好的做法吗?

您是否使用 Using 语句HttpResponseMessage

//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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Nko*_*osi 2

您是否将Using 语句与HttpResponseMessage 一起使用?

简短回答:是的,可以。

像下面这样的做法是好的吗?

这取决于。

虽然通常建议实践将IDisposable派生类包装起来using以便正确处置,但所示的示例可能错误地使用了它。

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