/// <summary> /// Initializes a new instance of the <see cref="RestHttpClient"/> class. /// </summary> /// <param name="httpClient">The HttpClient from http client factory.</param> /// <param name="loggerFactory">The logger factory.</param> /// <param name="configuration">The configuration.</param> /// <param name="httpContextAccessor">The HTTP context accessor.</param> public RestHttpClient(HttpClient httpClient, ILoggerFactory loggerFactory, RestHttpClientOptions configuration, IHttpContextAccessor?httpContextAccessor) { _httpClient = httpClient; HttpContextAccessor = httpContextAccessor; LoggerFactory = loggerFactory; Configuration = configuration; _log = loggerFactory.CreateLogger <RestHttpClient>(); // To reuse the HttpClient instance, we will use the cancellation token to manage timeouts. // To do this, you need to set the main timeout to the maximum value, // because it will override the value specified in the cancellation token. _httpClient.Timeout = System.Threading.Timeout.InfiniteTimeSpan; if (HttpContextAccessor?.HttpContext is not null && HttpContextAccessor.HttpContext.Request.Headers.TryGetValue(AuthorizationHeader, out var authorizeHeader) && !string.IsNullOrEmpty(authorizeHeader)) { var token = authorizeHeader.FirstOrDefault(); if (token is not null && token.StartsWith(BearerIdentifier, StringComparison.OrdinalIgnoreCase)) { token = token.Replace(BearerIdentifier, string.Empty).TrimStart(); httpClient.SetBearerToken(token); } } }
/// <summary> /// Initializes a new instance of the <see cref="RestHttpClientFromOptions{TOptions}"/> class. /// </summary> /// <param name="optionsAccessor">The options.</param> /// <param name="httpClient">The HttpClient from http client factory.</param> /// <param name="loggerFactory">The logger factory.</param> /// <param name="configuration">The configuration.</param> /// <param name="httpContextAccessor">The HTTP context accessor.</param> /// <param name="baseUri">The base Uri of all requests. For example: http://rsm.api.monq.cloud</param> public RestHttpClientFromOptions( IOptions <TOptions> optionsAccessor, HttpClient httpClient, ILoggerFactory loggerFactory, RestHttpClientOptions configuration, IHttpContextAccessor httpContextAccessor, string baseUri) : this(httpClient, loggerFactory, configuration, httpContextAccessor, baseUri) { }
/// <summary> /// Initializes a new instance of the <see cref="RestHttpClientFromOptions{TOptions}"/> class. /// </summary> /// <param name="httpClient">The HttpClient from http client factory.</param> /// <param name="loggerFactory">The logger factory.</param> /// <param name="configuration">The configuration.</param> /// <param name="httpContextAccessor">The HTTP context accessor.</param> /// <param name="baseUri">The base Uri of all requests. For example: http://rsm.api.monq.cloud</param> public RestHttpClientFromOptions( HttpClient httpClient, ILoggerFactory loggerFactory, RestHttpClientOptions configuration, IHttpContextAccessor httpContextAccessor, string baseUri) : base(httpClient, loggerFactory, configuration, httpContextAccessor) { if (string.IsNullOrWhiteSpace(baseUri)) { throw new ArgumentNullException(nameof(baseUri), "The base uri not set."); } BaseUri = AddTrailingSlash(baseUri); HttpClient.BaseAddress = new Uri(BaseUri); }