diff --git a/backend/extensions/Squidex.Extensions/Actions/Fastly/FastlyActionHandler.cs b/backend/extensions/Squidex.Extensions/Actions/Fastly/FastlyActionHandler.cs index 1492b0bfc..82e008f11 100644 --- a/backend/extensions/Squidex.Extensions/Actions/Fastly/FastlyActionHandler.cs +++ b/backend/extensions/Squidex.Extensions/Actions/Fastly/FastlyActionHandler.cs @@ -50,11 +50,13 @@ namespace Squidex.Extensions.Actions.Fastly httpClient.Timeout = TimeSpan.FromSeconds(2); var requestUrl = $"https://api.fastly.com/service/{job.FastlyServiceID}/purge/{job.Key}"; - var request = new HttpRequestMessage(HttpMethod.Post, requestUrl); - request.Headers.Add("Fastly-Key", job.FastlyApiKey); + using (var request = new HttpRequestMessage(HttpMethod.Post, requestUrl)) + { + request.Headers.Add("Fastly-Key", job.FastlyApiKey); - return await httpClient.OneWayRequestAsync(request, ct: ct); + return await httpClient.OneWayRequestAsync(request, ct: ct); + } } } } diff --git a/backend/extensions/Squidex.Extensions/Actions/Webhook/WebhookActionHandler.cs b/backend/extensions/Squidex.Extensions/Actions/Webhook/WebhookActionHandler.cs index 6cd86eb5d..25fc872a8 100644 --- a/backend/extensions/Squidex.Extensions/Actions/Webhook/WebhookActionHandler.cs +++ b/backend/extensions/Squidex.Extensions/Actions/Webhook/WebhookActionHandler.cs @@ -57,16 +57,17 @@ namespace Squidex.Extensions.Actions.Webhook { using (var httpClient = httpClientFactory.CreateClient()) { - var request = new HttpRequestMessage(HttpMethod.Post, job.RequestUrl) + using (var request = new HttpRequestMessage(HttpMethod.Post, job.RequestUrl) { Content = new StringContent(job.RequestBody, Encoding.UTF8, "application/json") - }; - - request.Headers.Add("X-Signature", job.RequestSignature); - request.Headers.Add("X-Application", "Squidex Webhook"); - request.Headers.Add("User-Agent", "Squidex Webhook"); + }) + { + request.Headers.Add("X-Signature", job.RequestSignature); + request.Headers.Add("X-Application", "Squidex Webhook"); + request.Headers.Add("User-Agent", "Squidex Webhook"); - return await httpClient.OneWayRequestAsync(request, job.RequestBody, ct); + return await httpClient.OneWayRequestAsync(request, job.RequestBody, ct); + } } } } diff --git a/backend/src/Squidex.Domain.Apps.Core.Operations/Scripting/Extensions/HttpJintExtension.cs b/backend/src/Squidex.Domain.Apps.Core.Operations/Scripting/Extensions/HttpJintExtension.cs index 8aede99ac..adf4ea1d8 100644 --- a/backend/src/Squidex.Domain.Apps.Core.Operations/Scripting/Extensions/HttpJintExtension.cs +++ b/backend/src/Squidex.Domain.Apps.Core.Operations/Scripting/Extensions/HttpJintExtension.cs @@ -52,16 +52,19 @@ namespace Squidex.Domain.Apps.Core.Scripting.Extensions { using (var httpClient = httpClientFactory.CreateClient()) { - var request = CreateRequest(url, headers); - var response = await httpClient.SendAsync(request, context.CancellationToken); - - response.EnsureSuccessStatusCode(); + using (var request = CreateRequest(url, headers)) + { + using (var response = await httpClient.SendAsync(request, context.CancellationToken)) + { + response.EnsureSuccessStatusCode(); - var responseObject = await ParseResponse(context, response); + var responseObject = await ParseResponse(context, response); - context.Engine.ResetConstraints(); + context.Engine.ResetConstraints(); - callback(responseObject); + callback(responseObject); + } + } } } catch (Exception ex) diff --git a/backend/src/Squidex.Domain.Apps.Entities/Backup/TempFolderBackupArchiveLocation.cs b/backend/src/Squidex.Domain.Apps.Entities/Backup/TempFolderBackupArchiveLocation.cs index 0dab4fcdf..2c38afe06 100644 --- a/backend/src/Squidex.Domain.Apps.Entities/Backup/TempFolderBackupArchiveLocation.cs +++ b/backend/src/Squidex.Domain.Apps.Entities/Backup/TempFolderBackupArchiveLocation.cs @@ -54,7 +54,7 @@ namespace Squidex.Domain.Apps.Entities.Backup { client.Timeout = TimeSpan.FromHours(1); - response = await client.GetAsync(url); + response = await client.GetAsync(url, HttpCompletionOption.ResponseHeadersRead); response.EnsureSuccessStatusCode(); using (var sourceStream = await response.Content.ReadAsStreamAsync()) @@ -67,6 +67,10 @@ namespace Squidex.Domain.Apps.Entities.Backup { throw new BackupRestoreException($"Cannot download the archive. Got status code: {response?.StatusCode}.", ex); } + finally + { + response?.Dispose(); + } } try diff --git a/backend/src/Squidex.Infrastructure/Translations/DeepLTranslator.cs b/backend/src/Squidex.Infrastructure/Translations/DeepLTranslator.cs index 8ef01e764..984d1c234 100644 --- a/backend/src/Squidex.Infrastructure/Translations/DeepLTranslator.cs +++ b/backend/src/Squidex.Infrastructure/Translations/DeepLTranslator.cs @@ -70,25 +70,29 @@ namespace Squidex.Infrastructure.Translations parameters["source_lang"] = GetLanguageCode(sourceLanguage); } - var response = await httpClient.PostAsync(Url, new FormUrlEncodedContent(parameters), ct); - var responseString = await response.Content.ReadAsStringAsync(); + var body = new FormUrlEncodedContent(parameters); - if (response.IsSuccessStatusCode) + using (var response = await httpClient.PostAsync(Url, body, ct)) { - var result = jsonSerializer.Deserialize(responseString); + var responseString = await response.Content.ReadAsStringAsync(); - if (result?.Translations?.Length == 1) + if (response.IsSuccessStatusCode) { - return new Translation(TranslationResult.Translated, result.Translations[0].Text); + var result = jsonSerializer.Deserialize(responseString); + + if (result?.Translations?.Length == 1) + { + return new Translation(TranslationResult.Translated, result.Translations[0].Text); + } } - } - if (response.StatusCode == HttpStatusCode.BadRequest) - { - return new Translation(TranslationResult.LanguageNotSupported, resultText: responseString); - } + if (response.StatusCode == HttpStatusCode.BadRequest) + { + return new Translation(TranslationResult.LanguageNotSupported, resultText: responseString); + } - return new Translation(TranslationResult.Failed, resultText: responseString); + return new Translation(TranslationResult.Failed, resultText: responseString); + } } private static string GetLanguageCode(Language language) diff --git a/backend/src/Squidex/Areas/Api/Controllers/Users/UsersController.cs b/backend/src/Squidex/Areas/Api/Controllers/Users/UsersController.cs index 67ea3b11d..f76e2ed42 100644 --- a/backend/src/Squidex/Areas/Api/Controllers/Users/UsersController.cs +++ b/backend/src/Squidex/Areas/Api/Controllers/Users/UsersController.cs @@ -189,22 +189,23 @@ namespace Squidex.Areas.Api.Controllers.Users if (!string.IsNullOrWhiteSpace(url)) { - var response = await client.GetAsync(url); - - if (response.IsSuccessStatusCode) + using (var response = await client.GetAsync(url, HttpCompletionOption.ResponseHeadersRead)) { - var contentType = response.Content.Headers.ContentType.ToString(); + if (response.IsSuccessStatusCode) + { + var contentType = response.Content.Headers.ContentType.ToString(); - var etag = response.Headers.ETag; + var etag = response.Headers.ETag; - var result = new FileStreamResult(await response.Content.ReadAsStreamAsync(), contentType); + var result = new FileStreamResult(await response.Content.ReadAsStreamAsync(), contentType); - if (!string.IsNullOrWhiteSpace(etag?.Tag)) - { - result.EntityTag = new EntityTagHeaderValue(etag.Tag, etag.IsWeak); - } + if (!string.IsNullOrWhiteSpace(etag?.Tag)) + { + result.EntityTag = new EntityTagHeaderValue(etag.Tag, etag.IsWeak); + } - return result; + return result; + } } } }