public void Reset() { source.Reset(); cache.Set("xti_token", ""); }
private async Task <TResult> Post <TResult, TModel>(string action, string modifier, TModel model, bool retryUnauthorized) { using var client = httpClientFactory.CreateClient(); if (!action.Equals("Authenticate", StringComparison.OrdinalIgnoreCase)) { var token = await xtiToken.Value(); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token); } var url = await clientUrl.Value(action, modifier); if (model == null) { throw new ArgumentNullException(nameof(model)); } object transformedModel = model; if (model is Forms.Form form) { transformedModel = form.Export(); } var serialized = JsonSerializer.Serialize(model, jsonSerializerOptions); using var content = new StringContent(serialized, Encoding.UTF8, "application/json"); using var response = await client.PostAsync(url, content); var responseContent = await response.Content.ReadAsStringAsync(); TResult result; try { if (response.IsSuccessStatusCode) { var resultContainer = JsonSerializer.Deserialize <ResultContainer <TResult> > ( responseContent, jsonSerializerOptions ); if (resultContainer == null) { throw new ArgumentNullException(nameof(resultContainer)); } result = resultContainer.Data ?? throw new ArgumentNullException("resultContainer.Data"); } else if (response.StatusCode == HttpStatusCode.Unauthorized && retryUnauthorized) { xtiToken.Reset(); result = await Post <TResult, TModel>(action, modifier, model, false); } else { var resultContainer = string.IsNullOrWhiteSpace(responseContent) ? new ResultContainer <ErrorModel[]>() { Data = new ErrorModel[] { } } : JsonSerializer.Deserialize <ResultContainer <ErrorModel[]> >(responseContent); throw new AppClientException(url, response.StatusCode, responseContent, resultContainer?.Data ?? new ErrorModel[0]); } } catch (JsonException ex) { throw new AppClientException(url, response.StatusCode, responseContent, new ErrorModel[] { new ErrorModel { Message = ex.Message } }); } return(result); }
public void ResetToken() => xtiToken?.Reset();