static bool IsExceptionTransient(Exception exception) { return(exception switch { BrokerUnreachableException bue => bue.InnerException switch { AuthenticationFailureException _ => false, _ => true },
/// <summary> /// Throw request exception asynchronous. /// </summary> /// <exception cref="RequestException"> /// Thrown when a Request error condition occurs. /// </exception> /// <returns> /// A <see cref="Task" /> representing the operation. /// </returns> private static async Task ThrowRequestExceptionAsync(HttpResponseMessage response) { string content = await response.Content.ReadAsStringAsync() .ConfigureAwait(continueOnCapturedContext: false); Error error = ParseError(response.StatusCode, content); RequestException requestException; switch (response.StatusCode) { case HttpStatusCode.BadRequest: requestException = new BadRequestException(error.Message, error.Code, error.Reason); break; case HttpStatusCode.Forbidden: requestException = new UnauthorizedAccessException(error.Message, error.Code, error.Reason); break; case HttpStatusCode.InternalServerError: requestException = new InternalServerErrorException(error.Message, error.Code, error.Reason); break; case HttpStatusCode.NotFound: requestException = new ResourceNotFoundException(error.Message, error.Code, error.Reason); break; case HttpStatusCode.Unauthorized: requestException = new AuthenticationFailureException(error.Message, error.Code, error.Reason); break; default: requestException = new RequestException(error.Message, error.Code, error.Reason); break; } throw requestException; }