/// <summary> /// Clones the client With a change /// </summary> public static Client With(this Client client, IGetHttpRequestMessage getHttpRequestMessage) => client != null ? new Client( client.SerializationAdapter, client.BaseUrl, client.DefaultRequestHeaders, client.logger is ILogger <Client> logger ? logger : null, client.createHttpClient, client.sendHttpRequestMessage, getHttpRequestMessage, client.ThrowExceptionOnFailure, client.Name) : throw new ArgumentNullException(nameof(client));
public async Task <HttpResponseMessage> SendHttpRequestMessage <TRequestBody>( HttpClient httpClient, IGetHttpRequestMessage httpRequestMessageFunc, IRequest <TRequestBody> request, ILogger logger, ISerializationAdapter serializationAdapter) { if (httpClient == null) { throw new ArgumentNullException(nameof(httpClient)); } if (httpRequestMessageFunc == null) { throw new ArgumentNullException(nameof(httpRequestMessageFunc)); } if (request == default) { throw new ArgumentNullException(nameof(request)); } logger ??= NullLogger.Instance; try { var httpRequestMessage = httpRequestMessageFunc.GetHttpRequestMessage(request, logger, serializationAdapter); logger.LogTrace(Messages.InfoAttemptingToSend, request); var httpResponseMessage = await httpClient.SendAsync(httpRequestMessage, request.CancellationToken).ConfigureAwait(false); logger.LogInformation(Messages.InfoSendReturnedNoException); return(httpResponseMessage); } catch (OperationCanceledException oce) { logger.LogError(oce, Messages.ErrorMessageOperationCancelled, request); throw; } catch (Exception ex) { logger.LogError(ex, Messages.ErrorOnSend, request); throw; } }