/// <summary> /// Simplifies error recognition by unwrapping complex exceptions. /// </summary> /// <param name="ex">The thrown exception.</param> /// <returns>An unwrapped exception in the form of a SignalRError.</returns> public static SignalRError GetError(this Exception ex) { ex = ex.Unwrap(); var wex = ex as WebException; var error = new SignalRError(ex); if (wex != null && wex.Response != null) { var response = wex.Response as HttpWebResponse; if (response != null) { error.SetResponse(response); error.StatusCode = response.StatusCode; Stream originStream = response.GetResponseStream(); if (originStream.CanRead) { // We need to copy the stream over and not consume it all on "ReadToEnd". If we consumed the entire stream GetError // would only be able to be called once per Exception, otherwise you get inconsistent ResponseBody results. Stream stream = Clone(originStream); // Consume our copied stream using (var sr = new StreamReader(stream)) { error.ResponseBody = sr.ReadToEnd(); } } } } return error; }
/// <summary> /// Simplifies error recognition by unwrapping complex exceptions. /// </summary> /// <param name="ex">The thrown exception.</param> /// <returns>An unwrapped exception in the form of a SignalRError.</returns> public static SignalRError GetError(this Exception ex) { ex = ex.Unwrap(); var wex = ex as WebException; var error = new SignalRError(ex); if (wex != null && wex.Response != null) { var response = wex.Response as HttpWebResponse; if (response != null) { error.SetResponse(response); error.StatusCode = response.StatusCode; Stream originStream = response.GetResponseStream(); if (originStream.CanRead) { // We need to copy the stream over and not consume it all on "ReadToEnd". If we consumed the entire stream GetError // would only be able to be called once per Exception, otherwise you get inconsistent ResponseBody results. Stream stream = Clone(originStream); // Consume our copied stream using (var sr = new StreamReader(stream)) { error.ResponseBody = sr.ReadToEnd(); } } } } return(error); }