From 493865f8e343cfb112f2f63bb555c0059eadac64 Mon Sep 17 00:00:00 2001 From: Almis90 Date: Wed, 5 Jul 2023 19:23:23 +0300 Subject: [PATCH] Refactored http request creation and disposal Addressed an issue related to the using statement that was trying to send a disposed HttpRequestMessage in the catch block --- OpenAI.SDK/Extensions/HttpclientExtensions.cs | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/OpenAI.SDK/Extensions/HttpclientExtensions.cs b/OpenAI.SDK/Extensions/HttpclientExtensions.cs index 6f105d1a..054ed940 100644 --- a/OpenAI.SDK/Extensions/HttpclientExtensions.cs +++ b/OpenAI.SDK/Extensions/HttpclientExtensions.cs @@ -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 @@ -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 PostFileAndReadAsAsync(this HttpClient client, string uri, HttpContent content, CancellationToken cancellationToken = default) { var response = await client.PostAsync(uri, content, cancellationToken);