private static async Task <HttpFragileOperationResult <T> > ConvertHttpResponseMessageToHttpDeserializedResult <T>(HttpResponseMessage httpResponseMessage, JsonSerializerSettings serializerSettings = null)
        {
            var stringResult = await httpResponseMessage.Content.ReadAsStringAsync().ConfigureAwait(false);

            var statusCode = httpResponseMessage.StatusCode;

            if (httpResponseMessage.IsSuccessStatusCode)
            {
                try
                {
                    var deserializedObject = serializerSettings == null?JsonConvert.DeserializeObject <T>(stringResult) : JsonConvert.DeserializeObject <T>(stringResult, serializerSettings);

                    return(HttpFragileOperationResult <T> .CreateSuccessfulResult(deserializedObject, statusCode, stringResult));
                }
                catch (JsonException e)
                {
                    //Log in infrastructure Logs
                    return(HttpFragileOperationResult <T> .CreateErrorResult(statusCode, stringResult, $"Unable to deserialize 200 result. Type: {typeof(T)}. Result: {stringResult}. Exception {e}."));
                }
            }

            if ((int)statusCode >= 500)
            {
                return(HttpFragileOperationResult <T> .CreateErrorResult(statusCode, stringResult, $"500+ error result. StatusCode: {statusCode}. Response: {stringResult}"));
            }

            return(HttpFragileOperationResult <T> .CreateFailedResult(statusCode, stringResult, $"Non-500+ error result. StatusCode: {statusCode}. Response: {stringResult}"));
        }
Example #2
0
        public HttpFragileOperationResult <T> ToHttpFragileOperationResult <T>(IEnumerable <string> errorMessages)
        {
            switch (Status)
            {
            case Status.Error:
                return(HttpFragileOperationResult <T> .CreateErrorResult(StatusCode, ResponseStringContent, errorMessages.Concat(ErrorMessages)));

            case Status.Failed:
                return(HttpFragileOperationResult <T> .CreateFailedResult(StatusCode, ResponseStringContent, errorMessages.Concat(ErrorMessages)));

            case Status.Success:
                throw new ArgumentOutOfRangeException();

            default:
                throw new ArgumentOutOfRangeException();
            }
        }