Skip to content

Commit

Permalink
Refactored http request creation and disposal
Browse files Browse the repository at this point in the history
Addressed an issue related to the using statement that was trying to send a disposed HttpRequestMessage in the catch block
  • Loading branch information
Almis90 committed Jul 5, 2023
1 parent 3a091a0 commit 493865f
Showing 1 changed file with 14 additions and 5 deletions.
19 changes: 14 additions & 5 deletions OpenAI.SDK/Extensions/HttpclientExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,7 @@ public static HttpResponseMessage PostAsStreamAsync(this HttpClient client, stri

var content = JsonContent.Create(requestModel, null, settings);

using var request = new HttpRequestMessage(HttpMethod.Post, uri);
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("text/event-stream"));
request.Content = content;
using var request = CreatePostEventStreamRequest(uri, content);

#if NET6_0_OR_GREATER
try
Expand All @@ -36,20 +34,31 @@ public static HttpResponseMessage PostAsStreamAsync(this HttpClient client, stri
}
catch (PlatformNotSupportedException)
{
return SendRequestPreNet6(client, request, cancellationToken);
using var newRequest = CreatePostEventStreamRequest(uri, content);

return SendRequestPreNet6(client, newRequest, cancellationToken);
}
#else
return SendRequestPreNet6(client, request, cancellationToken);
#endif
}

public static HttpResponseMessage SendRequestPreNet6(HttpClient client, HttpRequestMessage request, CancellationToken cancellationToken)
private static HttpResponseMessage SendRequestPreNet6(HttpClient client, HttpRequestMessage request, CancellationToken cancellationToken)
{
var responseTask = client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead, cancellationToken);
var response = responseTask.GetAwaiter().GetResult();
return response;
}

private static HttpRequestMessage CreatePostEventStreamRequest(string uri, HttpContent content)
{
var request = new HttpRequestMessage(HttpMethod.Post, uri);
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("text/event-stream"));
request.Content = content;

return request;
}

public static async Task<TResponse> PostFileAndReadAsAsync<TResponse>(this HttpClient client, string uri, HttpContent content, CancellationToken cancellationToken = default)
{
var response = await client.PostAsync(uri, content, cancellationToken);
Expand Down

0 comments on commit 493865f

Please sign in to comment.