feat(BaseHttpClientService.FetchAsync): Schema-, Port-, Pfad- und Query-Parameter-Optionen hinzugefügt

This commit is contained in:
Developer 02 2024-11-22 10:12:40 +01:00
parent e44b2895c9
commit 48afa6b433
2 changed files with 30 additions and 7 deletions

View File

@ -4,12 +4,15 @@ namespace DigitalData.Core.Abstractions.Client
{ {
public interface IBaseHttpClientService public interface IBaseHttpClientService
{ {
public string Uri { get; init; } string Uri { get; init; }
public CookieCollection GetCookies(string route = ""); CookieCollection GetCookies(string route = "");
Task<HttpResponseMessage> FetchAsync( Task<HttpResponseMessage> FetchAsync(
string route = "", string? scheme = null,
int? port = null,
string? path = null,
Dictionary<string, string>? queryParams = null,
HttpMethod? method = null, HttpMethod? method = null,
HttpContent? body = null, HttpContent? body = null,
Dictionary<string, string>? form = null, Dictionary<string, string>? form = null,

View File

@ -2,6 +2,7 @@
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using System.Diagnostics.CodeAnalysis; using System.Diagnostics.CodeAnalysis;
using System.Net; using System.Net;
using System.Web;
namespace DigitalData.Core.Client 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 CookieCollection GetCookies(string route = "") => _cookies.GetCookies(uri: new Uri(Uri + route));
public async Task<HttpResponseMessage> FetchAsync( public async Task<HttpResponseMessage> FetchAsync(
string route = "", string? scheme = null,
int? port = null,
string? path = null,
Dictionary<string, string>? queryParams = null,
HttpMethod? method = null, HttpMethod? method = null,
HttpContent? body = null, HttpContent? body = null,
Dictionary<string, string>? form = null, Dictionary<string, string>? form = null,
@ -36,10 +40,26 @@ namespace DigitalData.Core.Client
method ??= HttpMethod.Get; method ??= HttpMethod.Get;
// create URL // create URL
var requestUriStr = Uri + route; var uriBuilder = new UriBuilder(Uri);
var requestUri = new Uri(requestUriStr); 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 // Add headers if provided
headers?.ForEach(header => requestMessage.Headers.Add(header.Key, header.Value)); headers?.ForEach(header => requestMessage.Headers.Add(header.Key, header.Value));