From 48afa6b433d2c65455a98da57f9d6bf13cc9735a Mon Sep 17 00:00:00 2001 From: Developer 02 Date: Fri, 22 Nov 2024 10:12:40 +0100 Subject: [PATCH] =?UTF-8?q?feat(BaseHttpClientService.FetchAsync):=20Schem?= =?UTF-8?q?a-,=20Port-,=20Pfad-=20und=20Query-Parameter-Optionen=20hinzuge?= =?UTF-8?q?f=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Client/IBaseHttpClientService.cs | 9 ++++-- .../BaseHttpClientService.cs | 28 ++++++++++++++++--- 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/DigitalData.Core.Abstractions/Client/IBaseHttpClientService.cs b/DigitalData.Core.Abstractions/Client/IBaseHttpClientService.cs index cd4c43c..756e94e 100644 --- a/DigitalData.Core.Abstractions/Client/IBaseHttpClientService.cs +++ b/DigitalData.Core.Abstractions/Client/IBaseHttpClientService.cs @@ -4,12 +4,15 @@ namespace DigitalData.Core.Abstractions.Client { public interface IBaseHttpClientService { - public string Uri { get; init; } + string Uri { get; init; } - public CookieCollection GetCookies(string route = ""); + CookieCollection GetCookies(string route = ""); Task FetchAsync( - string route = "", + string? scheme = null, + int? port = null, + string? path = null, + Dictionary? queryParams = null, HttpMethod? method = null, HttpContent? body = null, Dictionary? form = null, diff --git a/DigitalData.Core.Client/BaseHttpClientService.cs b/DigitalData.Core.Client/BaseHttpClientService.cs index 95a2317..ee45d4d 100644 --- a/DigitalData.Core.Client/BaseHttpClientService.cs +++ b/DigitalData.Core.Client/BaseHttpClientService.cs @@ -2,6 +2,7 @@ using Microsoft.Extensions.Options; using System.Diagnostics.CodeAnalysis; using System.Net; +using System.Web; namespace DigitalData.Core.Client { @@ -23,7 +24,10 @@ namespace DigitalData.Core.Client public CookieCollection GetCookies(string route = "") => _cookies.GetCookies(uri: new Uri(Uri + route)); public async Task FetchAsync( - string route = "", + string? scheme = null, + int? port = null, + string? path = null, + Dictionary? queryParams = null, HttpMethod? method = null, HttpContent? body = null, Dictionary? form = null, @@ -36,10 +40,26 @@ namespace DigitalData.Core.Client method ??= HttpMethod.Get; // create URL - var requestUriStr = Uri + route; - var requestUri = new Uri(requestUriStr); + var uriBuilder = new UriBuilder(Uri); + if(scheme is not null) + uriBuilder.Scheme = scheme; + if (port is int portInt) + uriBuilder.Port = portInt; + uriBuilder.Path = path; - var requestMessage = new HttpRequestMessage(method, requestUriStr); + // Add query parameters if provided + if (queryParams?.Count > 0) + { + var query = HttpUtility.ParseQueryString(uriBuilder.Query); + foreach (var param in queryParams) + query[param.Key] = param.Value; + + uriBuilder.Query = query.ToString(); + } + + var requestUri = uriBuilder.Uri; + + var requestMessage = new HttpRequestMessage(method, requestUri); // Add headers if provided headers?.ForEach(header => requestMessage.Headers.Add(header.Key, header.Value));