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; }
/// <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; } }