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