Skip to content

Commit badfc6a

Browse files
author
childish-sambino
authored
fix: fallback to private body and headers for response deserialization (#1168)
1 parent 5ed9472 commit badfc6a

File tree

2 files changed

+31
-7
lines changed

2 files changed

+31
-7
lines changed

src/SendGrid/Response.cs

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -107,32 +107,37 @@ public HttpResponseHeaders Headers
107107
/// <summary>
108108
/// Converts string formatted response body to a Dictionary.
109109
/// </summary>
110+
/// <param name="content">https://docs.microsoft.com/dotnet/api/system.net.http.httpcontent.</param>
110111
/// <returns>Dictionary object representation of HttpContent.</returns>
111-
public virtual async Task<Dictionary<string, dynamic>> DeserializeResponseBodyAsync()
112+
public virtual async Task<Dictionary<string, dynamic>> DeserializeResponseBodyAsync(HttpContent content = null)
112113
{
113-
if (this._body is null)
114+
content = content ?? this._body;
115+
if (content is null)
114116
{
115117
return new Dictionary<string, dynamic>();
116118
}
117119

118-
var stringContent = await this._body.ReadAsStringAsync().ConfigureAwait(false);
120+
var stringContent = await content.ReadAsStringAsync().ConfigureAwait(false);
119121
var dsContent = JsonConvert.DeserializeObject<Dictionary<string, dynamic>>(stringContent);
120122
return dsContent;
121123
}
122124

123125
/// <summary>
124126
/// Converts string formatted response headers to a Dictionary.
125127
/// </summary>
128+
/// <param name="headers">https://docs.microsoft.com/dotnet/api/system.net.http.headers.httpresponseheaders.</param>
126129
/// <returns>Dictionary object representation of HttpResponseHeaders.</returns>
127-
public virtual Dictionary<string, string> DeserializeResponseHeaders()
130+
public virtual Dictionary<string, string> DeserializeResponseHeaders(HttpResponseHeaders headers = null)
128131
{
129132
var dsContent = new Dictionary<string, string>();
130-
if (this._headers == null)
133+
134+
headers = headers ?? this._headers;
135+
if (headers == null)
131136
{
132137
return dsContent;
133138
}
134139

135-
foreach (var pair in this._headers)
140+
foreach (var pair in headers)
136141
{
137142
dsContent.Add(pair.Key, pair.Value.First());
138143
}

tests/SendGrid.Tests/ResponseTests.cs

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,15 @@ public async Task DeserializeResponseBodyAsync_JsonHttpContent_ReturnsBodyAsDict
2828
Assert.Equal(new JArray() { "alerts.read" }, responseBody["scopes"]);
2929
}
3030

31+
[Fact]
32+
public async Task DeserializeResponseBodyAsync_OverrideHttpContent_ReturnsBodyAsDictionary()
33+
{
34+
var content = "{\"scopes\": [\"alerts.read\"]}";
35+
var response = new Response(HttpStatusCode.OK, null, null);
36+
Dictionary<string, dynamic> responseBody = await response.DeserializeResponseBodyAsync(new StringContent(content));
37+
Assert.Equal(new JArray() { "alerts.read" }, responseBody["scopes"]);
38+
}
39+
3140
[Fact]
3241
public void DeserializeResponseHeaders_NullHttpResponseHeaders_ReturnsEmptyDictionary()
3342
{
@@ -37,13 +46,23 @@ public void DeserializeResponseHeaders_NullHttpResponseHeaders_ReturnsEmptyDicti
3746
}
3847

3948
[Fact]
40-
public void DeserializeResponseHeaders_NullHttpResponseHeaders_ReturnsHeadersAsDictionary()
49+
public void DeserializeResponseHeaders_HttpResponseHeaders_ReturnsHeadersAsDictionary()
4150
{
4251
var message = new HttpResponseMessage();
4352
message.Headers.Add("HeaderKey", "HeaderValue");
4453
var response = new Response(HttpStatusCode.OK, null, message.Headers);
4554
Dictionary<string, string> responseHeadersDeserialized = response.DeserializeResponseHeaders();
4655
Assert.Equal("HeaderValue", responseHeadersDeserialized["HeaderKey"]);
4756
}
57+
58+
[Fact]
59+
public void DeserializeResponseHeaders_OverrideHttpResponseHeaders_ReturnsHeadersAsDictionary()
60+
{
61+
var message = new HttpResponseMessage();
62+
message.Headers.Add("HeaderKey", "HeaderValue");
63+
var response = new Response(HttpStatusCode.OK, null, null);
64+
Dictionary<string, string> responseHeadersDeserialized = response.DeserializeResponseHeaders(message.Headers);
65+
Assert.Equal("HeaderValue", responseHeadersDeserialized["HeaderKey"]);
66+
}
4867
}
4968
}

0 commit comments

Comments
 (0)