Skip to content

Commit ad6ed8a

Browse files
committed
Added support for PUT HTTP method
1 parent 5156ec8 commit ad6ed8a

3 files changed

Lines changed: 34 additions & 4 deletions

File tree

src/BuildingBlocks/Resilience/Resilience.Http/IHttpClient.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,7 @@ public interface IHttpClient
1010
Task<HttpResponseMessage> PostAsync<T>(string uri, T item, string authorizationToken = null, string requestId = null, string authorizationMethod = "Bearer");
1111

1212
Task<HttpResponseMessage> DeleteAsync(string uri, string authorizationToken = null, string requestId = null, string authorizationMethod = "Bearer");
13+
14+
Task<HttpResponseMessage> PutAsync<T>(string uri, T item, string authorizationToken = null, string requestId = null, string authorizationMethod = "Bearer");
1315
}
1416
}

src/BuildingBlocks/Resilience/Resilience.Http/ResilientHttpClient.cs

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,19 @@ public Task<string> GetStringAsync(string uri, string authorizationToken = null,
5555
});
5656
}
5757

58-
public Task<HttpResponseMessage> PostAsync<T>(string uri, T item, string authorizationToken = null, string requestId = null, string authorizationMethod = "Bearer")
58+
private Task<HttpResponseMessage> DoPostPutAsync<T>(HttpMethod method, string uri, T item, string authorizationToken = null, string requestId = null, string authorizationMethod = "Bearer")
5959
{
60+
61+
if (method != HttpMethod.Post && method != HttpMethod.Put)
62+
{
63+
throw new ArgumentException("Value must be either post or put.", nameof(method));
64+
}
65+
6066
// a new StringContent must be created for each retry
6167
// as it is disposed after each call
6268
return HttpInvoker(async () =>
6369
{
64-
var requestMessage = new HttpRequestMessage(HttpMethod.Post, uri);
70+
var requestMessage = new HttpRequestMessage(method, uri);
6571

6672
requestMessage.Content = new StringContent(JsonConvert.SerializeObject(item), System.Text.Encoding.UTF8, "application/json");
6773

@@ -89,7 +95,14 @@ public Task<HttpResponseMessage> PostAsync<T>(string uri, T item, string authori
8995
});
9096
}
9197

92-
98+
public Task<HttpResponseMessage> PostAsync<T>(string uri, T item, string authorizationToken = null, string requestId = null, string authorizationMethod = "Bearer")
99+
{
100+
return DoPostPutAsync(HttpMethod.Post, uri, item, authorizationToken, requestId, authorizationMethod);
101+
}
102+
public Task<HttpResponseMessage> PutAsync<T>(string uri, T item, string authorizationToken = null, string requestId = null, string authorizationMethod = "Bearer")
103+
{
104+
return DoPostPutAsync(HttpMethod.Put, uri, item, authorizationToken, requestId, authorizationMethod);
105+
}
93106
public Task<HttpResponseMessage> DeleteAsync(string uri, string authorizationToken = null, string requestId = null, string authorizationMethod = "Bearer")
94107
{
95108
return HttpInvoker(async () =>

src/BuildingBlocks/Resilience/Resilience.Http/StandardHttpClient.cs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using Microsoft.Extensions.Logging;
22
using Newtonsoft.Json;
3+
using System;
34
using System.Net;
45
using System.Net.Http;
56
using System.Net.Http.Headers;
@@ -32,8 +33,13 @@ public async Task<string> GetStringAsync(string uri, string authorizationToken =
3233
return await response.Content.ReadAsStringAsync();
3334
}
3435

35-
public async Task<HttpResponseMessage> PostAsync<T>(string uri, T item, string authorizationToken = null, string requestId = null, string authorizationMethod = "Bearer")
36+
private async Task<HttpResponseMessage> DoPostPutAsync<T>(HttpMethod method, string uri, T item, string authorizationToken = null, string requestId = null, string authorizationMethod = "Bearer")
3637
{
38+
if (method != HttpMethod.Post && method != HttpMethod.Put)
39+
{
40+
throw new ArgumentException("Value must be either post or put.", nameof(method));
41+
}
42+
3743
// a new StringContent must be created for each retry
3844
// as it is disposed after each call
3945

@@ -65,6 +71,15 @@ public async Task<HttpResponseMessage> PostAsync<T>(string uri, T item, string a
6571
}
6672

6773

74+
public async Task<HttpResponseMessage> PostAsync<T>(string uri, T item, string authorizationToken = null, string requestId = null, string authorizationMethod = "Bearer")
75+
{
76+
return await DoPostPutAsync(HttpMethod.Post, uri, item, authorizationToken, requestId, authorizationToken);
77+
}
78+
79+
public async Task<HttpResponseMessage> PutAsync<T>(string uri, T item, string authorizationToken = null, string requestId = null, string authorizationMethod = "Bearer")
80+
{
81+
return await DoPostPutAsync(HttpMethod.Put, uri, item, authorizationToken, requestId, authorizationToken);
82+
}
6883
public async Task<HttpResponseMessage> DeleteAsync(string uri, string authorizationToken = null, string requestId = null, string authorizationMethod = "Bearer")
6984
{
7085
var requestMessage = new HttpRequestMessage(HttpMethod.Delete, uri);

0 commit comments

Comments
 (0)