diff --git a/src/Twilio/Http/Net35/WebRequestClient.cs b/src/Twilio/Http/Net35/WebRequestClient.cs index 5d3b35b2c..c7fd951dc 100644 --- a/src/Twilio/Http/Net35/WebRequestClient.cs +++ b/src/Twilio/Http/Net35/WebRequestClient.cs @@ -37,7 +37,7 @@ public override Response MakeRequest(Request request) { IHttpWebResponseWrapper response = httpRequest.GetResponse(); string content = GetResponseContent(response); - this.LastResponse = new Response(response.StatusCode, content); + this.LastResponse = new Response(response.StatusCode, content, response.Headers); } catch (WebExceptionWrapper e) { @@ -48,7 +48,7 @@ public override Response MakeRequest(Request request) } // Non 2XX status code IHttpWebResponseWrapper errorResponse = e.Response; - this.LastResponse = new Response(errorResponse.StatusCode, GetResponseContent(errorResponse)); + this.LastResponse = new Response(errorResponse.StatusCode, GetResponseContent(errorResponse), errorResponse.Headers); } return this.LastResponse; } diff --git a/src/Twilio/Http/Net35/WebRequestWrappers.cs b/src/Twilio/Http/Net35/WebRequestWrappers.cs index 09471b002..a335fb699 100644 --- a/src/Twilio/Http/Net35/WebRequestWrappers.cs +++ b/src/Twilio/Http/Net35/WebRequestWrappers.cs @@ -35,6 +35,7 @@ public interface IHttpWebResponseWrapper { HttpStatusCode StatusCode { get; set; } Stream GetResponseStream(); + WebHeaderCollection Headers { get; } } public class HttpWebRequestWrapper : IHttpWebRequestWrapper @@ -125,6 +126,11 @@ public Stream GetResponseStream() { return this._httpWebResponse.GetResponseStream(); } + + public WebHeaderCollection Headers + { + get { return this._httpWebResponse.Headers; } + } } public class WebExceptionWrapper : Exception diff --git a/src/Twilio/Http/Response.cs b/src/Twilio/Http/Response.cs index 498b4b516..4e19fef1e 100644 --- a/src/Twilio/Http/Response.cs +++ b/src/Twilio/Http/Response.cs @@ -1,5 +1,11 @@ using System.Net; +#if NET35 +using Headers = System.Net.WebHeaderCollection; +#else +using Headers = System.Net.Http.Headers.HttpResponseHeaders; +#endif + namespace Twilio.Http { /// @@ -18,14 +24,21 @@ public class Response public string Content { get; } /// - /// Create a new Response + /// Headers + /// + public Headers Headers { get; } + + /// + /// Create a new Response /// /// HTTP status code /// Content string - public Response (HttpStatusCode statusCode, string content) + /// Headers + public Response(HttpStatusCode statusCode, string content, Headers headers = null) { StatusCode = statusCode; Content = content; + Headers = headers; } } } diff --git a/src/Twilio/Http/SystemNetHttpClient.cs b/src/Twilio/Http/SystemNetHttpClient.cs index d5bda5c97..b6d253742 100644 --- a/src/Twilio/Http/SystemNetHttpClient.cs +++ b/src/Twilio/Http/SystemNetHttpClient.cs @@ -13,11 +13,11 @@ namespace Twilio.Http /// public class SystemNetHttpClient : HttpClient { - #if NET451 +#if NET451 private string PlatVersion = " (.NET Framework 4.5.1+)"; - #else +#else private string PlatVersion = $" ({RuntimeInformation.FrameworkDescription})"; - #endif +#endif private readonly System.Net.Http.HttpClient _httpClient; @@ -73,7 +73,7 @@ public override async Task MakeRequestAsync(Request request) // Create and return a new Response. Keep a reference to the last // response for debugging, but don't return it as it may be shared // among threads. - var response = new Response(httpResponse.StatusCode, await reader.ReadToEndAsync().ConfigureAwait(false)); + var response = new Response(httpResponse.StatusCode, await reader.ReadToEndAsync().ConfigureAwait(false), httpResponse.Headers); this.LastResponse = response; return response; }