From b1ec79a7b0b1938e5ac850e29ab89ad92ae6b7ed Mon Sep 17 00:00:00 2001 From: Jason Smith Date: Tue, 14 Jan 2014 17:28:58 +1100 Subject: [PATCH] Http.Sync now handles timeout responses raised as WebExceptions. These are coverted to httpresponses with a timeout status. The exception object is attached to the response so that deserialization does not occur. --- RestSharp/Http.Sync.cs | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/RestSharp/Http.Sync.cs b/RestSharp/Http.Sync.cs index 20430be4b..d3bcfb1ef 100644 --- a/RestSharp/Http.Sync.cs +++ b/RestSharp/Http.Sync.cs @@ -149,11 +149,27 @@ partial void AddSyncHeaderActions() _restrictedHeaderActions.Add("User-Agent", (r, v) => r.UserAgent = v); } - private HttpResponse GetResponse(HttpWebRequest request) + private void ExtractErrorResponse(HttpResponse httpResponse, Exception ex) { - var response = new HttpResponse(); - response.ResponseStatus = ResponseStatus.None; + var webException = ex as WebException; + + if (webException != null && webException.Status == WebExceptionStatus.Timeout) + { + httpResponse.ResponseStatus = ResponseStatus.TimedOut; + httpResponse.ErrorMessage = ex.Message; + httpResponse.ErrorException = webException; + return; + } + + httpResponse.ErrorMessage = ex.Message; + httpResponse.ErrorException = ex; + httpResponse.ResponseStatus = ResponseStatus.Error; + } + private HttpResponse GetResponse(HttpWebRequest request) + { + var response = new HttpResponse { ResponseStatus = ResponseStatus.None }; + try { var webResponse = GetRawResponse(request); @@ -161,9 +177,7 @@ private HttpResponse GetResponse(HttpWebRequest request) } catch (Exception ex) { - response.ErrorMessage = ex.Message; - response.ErrorException = ex; - response.ResponseStatus = ResponseStatus.Error; + ExtractErrorResponse(response, ex); } return response;