public async Task <ApiResponseResult <AuthInfo> > GetAuthInfoResponse(AuthInfoRequestData data) { HttpRequestMessage request = GetRequest(HttpMethod.Post, "auth/info"); try { request.Content = GetJsonContent(data); using (HttpResponseMessage response = await _client.SendAsync(request).ConfigureAwait(false)) { string body = await response.Content.ReadAsStringAsync().ConfigureAwait(false); ApiResponseResult <AuthInfo> validatedResponse = ApiResponseResult <AuthInfo>(body, response.StatusCode); if (validatedResponse.Success && string.IsNullOrEmpty(validatedResponse.Value.Salt)) { return(Logged(Api.ApiResponseResult <AuthInfo> .Fail(response.StatusCode, "Incorrect login credentials. Please try again"))); } return(Logged(validatedResponse)); } } catch (Exception e) when(e.IsApiCommunicationException()) { throw new HttpRequestException(e.Message, e); } }
private void HandleResult <T>(ApiResponseResult <T> result) where T : BaseResponse { if (result.Failure && !result.Actions.IsNullOrEmpty()) { HandleActionableFailureResult(result); } }
protected ApiResponseResult <T> Logged <T>(ApiResponseResult <T> result, string message = null) where T : BaseResponse { if (result.Failure) { _logger.Error($"API: {(!string.IsNullOrEmpty(message) ? message : "Request")} failed: {result.Error}"); } return(result); }
private void HandleActionableFailureResult <T>(ApiResponseResult <T> result) where T : BaseResponse { ApiResponseResult <BaseResponse> baseResponseResult = CreateApiResponseResult <BaseResponse>(result.Value, result.StatusCode); ActionableFailureApiResultEventArgs eventArgs = new(baseResponseResult); OnActionableFailureResult?.Invoke(this, eventArgs); }
protected ApiResponseResult <T> ApiResponseResult <T>(string body, HttpStatusCode code) where T : BaseResponse { try { T response = JsonConvert.DeserializeObject <T>(body); if (response == null) { throw new HttpRequestException(string.Empty); } ApiResponseResult <T> result = CreateApiResponseResult(response, code); HandleResult(result); return(result); } catch (JsonException) { throw new HttpRequestException(code.Description()); } }
public static ApiResponseResult <T> Fail <TOther>(ApiResponseResult <TOther> other) where TOther : BaseResponse { return(new ApiResponseResult <T>(other.StatusCode, false, other.Value)); }
public ActionableFailureApiResultEventArgs(ApiResponseResult <BaseResponse> result) { Result = result; }