Skip to content

Commit

Permalink
add method returning string (#82)
Browse files Browse the repository at this point in the history
* add method returning string

* add throwing up an error response

* remove flag

* add method without request

---------

Co-authored-by: koverin.a <koverin.a@ati.su>
  • Loading branch information
Draktolli and koverin.a committed Jun 14, 2024
1 parent cf83124 commit 18b0439
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 0 deletions.
52 changes: 52 additions & 0 deletions ATI.Services.Common/Http/Extensions/HttpClientExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,58 @@ public static class HttpClientExtensions
return new OperationResult<byte[]>(ex);
}
}

[PublicAPI]
public static async Task<OperationResult<string>> GetStringAsync<TRequest>(this HttpClient httpClient,
HttpMethod httpMethod,
string url,
TRequest request,
string metricEntity,
string urlTemplate = null,
Dictionary<string, string> headers = null,
JsonSerializerOptions serializerOptions = null,
RetryPolicySettings retryPolicySettings = null)
{
try
{
using var requestMessage = CreateHttpRequestMessageAndSetBaseFields(httpMethod, url, metricEntity, urlTemplate, headers, retryPolicySettings);

var serializeOptions = serializerOptions ?? SnakeCaseSerializerOptions;
requestMessage.SetContent(request, serializeOptions);

using var responseMessage = await httpClient.SendAsync(requestMessage);
return await responseMessage.GetStringFromHttpResponseAsync();
}
catch (Exception ex)
{
Logger.ErrorWithObject(ex, new { httpMethod, url, headers });
return new OperationResult<string>(ex);
}
}

[PublicAPI]
public static async Task<OperationResult<string>> GetStringAsync(this HttpClient httpClient,
HttpMethod httpMethod,
string url,
string metricEntity,
string urlTemplate = null,
Dictionary<string, string> headers = null,
JsonSerializerOptions serializerOptions = null,
RetryPolicySettings retryPolicySettings = null)
{
try
{
using var requestMessage = CreateHttpRequestMessageAndSetBaseFields(httpMethod, url, metricEntity, urlTemplate, headers, retryPolicySettings);

using var responseMessage = await httpClient.SendAsync(requestMessage);
return await responseMessage.GetStringFromHttpResponseAsync();
}
catch (Exception ex)
{
Logger.ErrorWithObject(ex, new { httpMethod, url, headers });
return new OperationResult<string>(ex);
}
}

[PublicAPI]
public static HttpRequestMessage CreateHttpRequestMessageAndSetBaseFields(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,4 +62,25 @@ public static async Task<OperationResult<byte[]>> GetByteArrayFromHttpResponseAs
return new OperationResult<byte[]>(ex);
}
}

[PublicAPI]
public static async Task<OperationResult<string>> GetStringFromHttpResponseAsync(this HttpResponseMessage responseMessage)
{
try
{
var result = await responseMessage.Content.ReadAsStringAsync();
return new OperationResult<string>(result, OperationResult.GetActionStatusByHttpStatusCode(responseMessage.StatusCode));
}
catch (Exception ex)
{
Logger.ErrorWithObject(ex, "Unsuccessfull response parsing", new
{
Method = responseMessage.RequestMessage.Method,
Content = await responseMessage.Content.ReadAsStringAsync(),
Headers = responseMessage.RequestMessage.Headers,
FullUri = responseMessage.RequestMessage.RequestUri
});
return new OperationResult<string>(ex);
}
}
}

0 comments on commit 18b0439

Please sign in to comment.