diff --git a/src/ZendeskApi.Client/Exceptions/ErrorWithMessageResponse.cs b/src/ZendeskApi.Client/Exceptions/ErrorWithMessageResponse.cs
new file mode 100644
index 00000000..5f460e9b
--- /dev/null
+++ b/src/ZendeskApi.Client/Exceptions/ErrorWithMessageResponse.cs
@@ -0,0 +1,38 @@
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace ZendeskApi.Client.Exceptions
+{
+ ///
+ public class ErrorWithMessageResponse
+ {
+ ///
+ public ErrorWithMessageResponse()
+ {
+ }
+
+ ///
+ [JsonProperty("error")]
+ public ErrorWithMessage Error { get; internal set; }
+
+ ///
+ public ErrorResponse ToErrorResponse(JObject details = null) => new ErrorResponse()
+ {
+ Error = Error?.Title,
+ Description = Error?.Message,
+ Details = details
+ };
+
+ ///
+ public class ErrorWithMessage()
+ {
+ ///
+ [JsonProperty("message")]
+ public string Message { get; internal set; }
+
+ ///
+ [JsonProperty("title")]
+ public string Title { get; internal set; }
+ }
+ }
+}
diff --git a/src/ZendeskApi.Client/Exceptions/ZendeskRequestExceptionBuilder.cs b/src/ZendeskApi.Client/Exceptions/ZendeskRequestExceptionBuilder.cs
index afdfd862..9993c0fe 100644
--- a/src/ZendeskApi.Client/Exceptions/ZendeskRequestExceptionBuilder.cs
+++ b/src/ZendeskApi.Client/Exceptions/ZendeskRequestExceptionBuilder.cs
@@ -59,12 +59,39 @@ public async Task Build()
(int)_response.StatusCode <= 499 &&
!_doNotBuildErrorModelResponseCodes.Contains((int)_response.StatusCode))
{
- error = await _response.Content.ReadAsAsync();
+ var content = await _response.Content.ReadAsStringAsync();
+ try
+ {
+ error = JsonConvert.DeserializeObject(content);
+ }
+ catch (JsonReaderException)
+ {
+ try
+ {
+ error = JsonConvert.DeserializeObject(content)?.ToErrorResponse();
+ }
+ catch
+ {
+ // Swallow a deserialization failure here.
+ }
+
+ // Throw the original exception if an error could not be deserialized.
+ if ( error == null )
+ throw;
+ }
+
if (error?.Error != null && error.Description != null)
{
- var detail = Environment.NewLine + JsonConvert.SerializeObject(error.Details, Formatting.Indented);
- message.AppendLine($"{error.Error}: {error.Description}. {detail}");
+ if (error.Details == null)
+ {
+ message.AppendLine($"{error.Error}: {error.Description.TrimEnd('.')}.");
+ }
+ else
+ {
+ var detail = Environment.NewLine + JsonConvert.SerializeObject(error.Details, Formatting.Indented);
+ message.AppendLine($"{error.Error}: {error.Description}. {detail}");
+ }
}
}