Skip to content

Commit 43652c9

Browse files
author
childish-sambino
authored
feat: include API response headers in 'Last Response' (#526)
The default HTTP client stores 'Last Request' and 'Last Response' information for access to more data about the raw API request/response. The response object did not contain the headers until now.
1 parent 2c7bec5 commit 43652c9

File tree

4 files changed

+27
-8
lines changed

4 files changed

+27
-8
lines changed

src/Twilio/Http/Net35/WebRequestClient.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public override Response MakeRequest(Request request)
3737
{
3838
IHttpWebResponseWrapper response = httpRequest.GetResponse();
3939
string content = GetResponseContent(response);
40-
this.LastResponse = new Response(response.StatusCode, content);
40+
this.LastResponse = new Response(response.StatusCode, content, response.Headers);
4141
}
4242
catch (WebExceptionWrapper e)
4343
{
@@ -48,7 +48,7 @@ public override Response MakeRequest(Request request)
4848
}
4949
// Non 2XX status code
5050
IHttpWebResponseWrapper errorResponse = e.Response;
51-
this.LastResponse = new Response(errorResponse.StatusCode, GetResponseContent(errorResponse));
51+
this.LastResponse = new Response(errorResponse.StatusCode, GetResponseContent(errorResponse), errorResponse.Headers);
5252
}
5353
return this.LastResponse;
5454
}

src/Twilio/Http/Net35/WebRequestWrappers.cs

+6
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ public interface IHttpWebResponseWrapper
3535
{
3636
HttpStatusCode StatusCode { get; set; }
3737
Stream GetResponseStream();
38+
WebHeaderCollection Headers { get; }
3839
}
3940

4041
public class HttpWebRequestWrapper : IHttpWebRequestWrapper
@@ -125,6 +126,11 @@ public Stream GetResponseStream()
125126
{
126127
return this._httpWebResponse.GetResponseStream();
127128
}
129+
130+
public WebHeaderCollection Headers
131+
{
132+
get { return this._httpWebResponse.Headers; }
133+
}
128134
}
129135

130136
public class WebExceptionWrapper : Exception

src/Twilio/Http/Response.cs

+15-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
using System.Net;
22

3+
#if NET35
4+
using Headers = System.Net.WebHeaderCollection;
5+
#else
6+
using Headers = System.Net.Http.Headers.HttpResponseHeaders;
7+
#endif
8+
39
namespace Twilio.Http
410
{
511
/// <summary>
@@ -18,14 +24,21 @@ public class Response
1824
public string Content { get; }
1925

2026
/// <summary>
21-
/// Create a new Response
27+
/// Headers
28+
/// </summary>
29+
public Headers Headers { get; }
30+
31+
/// <summary>
32+
/// Create a new Response
2233
/// </summary>
2334
/// <param name="statusCode">HTTP status code</param>
2435
/// <param name="content">Content string</param>
25-
public Response (HttpStatusCode statusCode, string content)
36+
/// <param name="headers">Headers</param>
37+
public Response(HttpStatusCode statusCode, string content, Headers headers = null)
2638
{
2739
StatusCode = statusCode;
2840
Content = content;
41+
Headers = headers;
2942
}
3043
}
3144
}

src/Twilio/Http/SystemNetHttpClient.cs

+4-4
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@ namespace Twilio.Http
1313
/// </summary>
1414
public class SystemNetHttpClient : HttpClient
1515
{
16-
#if NET451
16+
#if NET451
1717
private string PlatVersion = " (.NET Framework 4.5.1+)";
18-
#else
18+
#else
1919
private string PlatVersion = $" ({RuntimeInformation.FrameworkDescription})";
20-
#endif
20+
#endif
2121

2222
private readonly System.Net.Http.HttpClient _httpClient;
2323

@@ -73,7 +73,7 @@ public override async Task<Response> MakeRequestAsync(Request request)
7373
// Create and return a new Response. Keep a reference to the last
7474
// response for debugging, but don't return it as it may be shared
7575
// among threads.
76-
var response = new Response(httpResponse.StatusCode, await reader.ReadToEndAsync().ConfigureAwait(false));
76+
var response = new Response(httpResponse.StatusCode, await reader.ReadToEndAsync().ConfigureAwait(false), httpResponse.Headers);
7777
this.LastResponse = response;
7878
return response;
7979
}

0 commit comments

Comments
 (0)