示例#1
0
        public void TestCanCreate()
        {
            var exception = new ContentfulException(401, "{ \"message\": \"Unauthorized\" }");

            Assert.AreEqual(401, exception.ErrorCode);
            Assert.AreEqual("Unauthorized", exception.ErrorDetails.Message);
        }
        /// <summary>
        /// Creates an exception for a failed API request.
        /// </summary>
        /// <param name="res">The HttpResonseMessage.</param>
        /// <returns></returns>
        protected async Task CreateExceptionForFailedRequest(HttpResponseMessage res)
        {
            var responseContent = await res.Content.ReadAsStringAsync().ConfigureAwait(false);

            var jsonError    = string.IsNullOrEmpty(responseContent) ? null : JObject.Parse(responseContent);
            var sys          = jsonError?.SelectToken("$.sys").ToObject <SystemProperties>();
            var errorDetails = jsonError?.SelectToken("$.details")?.ToObject <ErrorDetails>();
            var message      = jsonError?.SelectToken("$.message")?.ToString();
            var statusCode   = (int)res.StatusCode;

            if (string.IsNullOrEmpty(message))
            {
                message = GetGenericErrorMessageForStatusCode(statusCode, sys?.Id);
            }

            if (errorDetails != null)
            {
                message += errorDetails.Errors?.ToString();
            }

            IEnumerable <string> headers = new List <string>();

            if (statusCode == 429 && res.Headers.TryGetValues("X-Contentful-RateLimit-Reset", out headers))
            {
                var rateLimitException = new ContentfulRateLimitException(message)
                {
                    RequestId               = jsonError.SelectToken("$.requestId")?.ToString(),
                    ErrorDetails            = errorDetails,
                    SystemProperties        = sys,
                    SecondsUntilNextRequest = headers.FirstOrDefault() == null ? 0 : int.Parse(headers.FirstOrDefault())
                };

                throw rateLimitException;
            }

            if (statusCode == 504)
            {
                var gatewayTimeoutException = new GatewayTimeoutException()
                {
                    RequestId        = jsonError?.SelectToken("$.requestId")?.ToString(),
                    ErrorDetails     = errorDetails,
                    SystemProperties = sys
                };

                throw gatewayTimeoutException;
            }

            var ex = new ContentfulException(statusCode, message)
            {
                RequestId        = jsonError.SelectToken("$.requestId")?.ToString(),
                ErrorDetails     = errorDetails,
                SystemProperties = sys
            };

            throw ex;
        }
示例#3
0
        /// <summary>
        /// Displays the error view.
        /// </summary>
        public void OnGet()
        {
            RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier;

            // Get the last exception that occurred.
            var ex = HttpContext?.Features?.Get <IExceptionHandlerFeature>()?.Error;

            if (ex is ContentfulException)
            {
                ContentfulException = ex as ContentfulException;
                RequestId           = ContentfulException.RequestId;
            }
        }