Browse Source

Added support for PUT HTTP method

pull/223/head
Eduard Tomas 7 years ago
parent
commit
c0553e239a
3 changed files with 34 additions and 4 deletions
  1. +2
    -0
      src/BuildingBlocks/Resilience/Resilience.Http/IHttpClient.cs
  2. +16
    -3
      src/BuildingBlocks/Resilience/Resilience.Http/ResilientHttpClient.cs
  3. +16
    -1
      src/BuildingBlocks/Resilience/Resilience.Http/StandardHttpClient.cs

+ 2
- 0
src/BuildingBlocks/Resilience/Resilience.Http/IHttpClient.cs View File

@ -10,5 +10,7 @@ namespace Microsoft.eShopOnContainers.BuildingBlocks.Resilience.Http
Task<HttpResponseMessage> PostAsync<T>(string uri, T item, string authorizationToken = null, string requestId = null, string authorizationMethod = "Bearer"); Task<HttpResponseMessage> PostAsync<T>(string uri, T item, string authorizationToken = null, string requestId = null, string authorizationMethod = "Bearer");
Task<HttpResponseMessage> DeleteAsync(string uri, string authorizationToken = null, string requestId = null, string authorizationMethod = "Bearer"); Task<HttpResponseMessage> DeleteAsync(string uri, string authorizationToken = null, string requestId = null, string authorizationMethod = "Bearer");
Task<HttpResponseMessage> PutAsync<T>(string uri, T item, string authorizationToken = null, string requestId = null, string authorizationMethod = "Bearer");
} }
} }

+ 16
- 3
src/BuildingBlocks/Resilience/Resilience.Http/ResilientHttpClient.cs View File

@ -55,13 +55,19 @@ namespace Microsoft.eShopOnContainers.BuildingBlocks.Resilience.Http
}); });
} }
public Task<HttpResponseMessage> PostAsync<T>(string uri, T item, string authorizationToken = null, string requestId = null, string authorizationMethod = "Bearer")
private Task<HttpResponseMessage> DoPostPutAsync<T>(HttpMethod method, string uri, T item, string authorizationToken = null, string requestId = null, string authorizationMethod = "Bearer")
{ {
if (method != HttpMethod.Post && method != HttpMethod.Put)
{
throw new ArgumentException("Value must be either post or put.", nameof(method));
}
// a new StringContent must be created for each retry // a new StringContent must be created for each retry
// as it is disposed after each call // as it is disposed after each call
return HttpInvoker(async () => return HttpInvoker(async () =>
{ {
var requestMessage = new HttpRequestMessage(HttpMethod.Post, uri);
var requestMessage = new HttpRequestMessage(method, uri);
requestMessage.Content = new StringContent(JsonConvert.SerializeObject(item), System.Text.Encoding.UTF8, "application/json"); requestMessage.Content = new StringContent(JsonConvert.SerializeObject(item), System.Text.Encoding.UTF8, "application/json");
@ -89,7 +95,14 @@ namespace Microsoft.eShopOnContainers.BuildingBlocks.Resilience.Http
}); });
} }
public Task<HttpResponseMessage> PostAsync<T>(string uri, T item, string authorizationToken = null, string requestId = null, string authorizationMethod = "Bearer")
{
return DoPostPutAsync(HttpMethod.Post, uri, item, authorizationToken, requestId, authorizationMethod);
}
public Task<HttpResponseMessage> PutAsync<T>(string uri, T item, string authorizationToken = null, string requestId = null, string authorizationMethod = "Bearer")
{
return DoPostPutAsync(HttpMethod.Put, uri, item, authorizationToken, requestId, authorizationMethod);
}
public Task<HttpResponseMessage> DeleteAsync(string uri, string authorizationToken = null, string requestId = null, string authorizationMethod = "Bearer") public Task<HttpResponseMessage> DeleteAsync(string uri, string authorizationToken = null, string requestId = null, string authorizationMethod = "Bearer")
{ {
return HttpInvoker(async () => return HttpInvoker(async () =>


+ 16
- 1
src/BuildingBlocks/Resilience/Resilience.Http/StandardHttpClient.cs View File

@ -1,5 +1,6 @@
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Newtonsoft.Json; using Newtonsoft.Json;
using System;
using System.Net; using System.Net;
using System.Net.Http; using System.Net.Http;
using System.Net.Http.Headers; using System.Net.Http.Headers;
@ -32,8 +33,13 @@ namespace Microsoft.eShopOnContainers.BuildingBlocks.Resilience.Http
return await response.Content.ReadAsStringAsync(); return await response.Content.ReadAsStringAsync();
} }
public async Task<HttpResponseMessage> PostAsync<T>(string uri, T item, string authorizationToken = null, string requestId = null, string authorizationMethod = "Bearer")
private async Task<HttpResponseMessage> DoPostPutAsync<T>(HttpMethod method, string uri, T item, string authorizationToken = null, string requestId = null, string authorizationMethod = "Bearer")
{ {
if (method != HttpMethod.Post && method != HttpMethod.Put)
{
throw new ArgumentException("Value must be either post or put.", nameof(method));
}
// a new StringContent must be created for each retry // a new StringContent must be created for each retry
// as it is disposed after each call // as it is disposed after each call
@ -65,6 +71,15 @@ namespace Microsoft.eShopOnContainers.BuildingBlocks.Resilience.Http
} }
public async Task<HttpResponseMessage> PostAsync<T>(string uri, T item, string authorizationToken = null, string requestId = null, string authorizationMethod = "Bearer")
{
return await DoPostPutAsync(HttpMethod.Post, uri, item, authorizationToken, requestId, authorizationToken);
}
public async Task<HttpResponseMessage> PutAsync<T>(string uri, T item, string authorizationToken = null, string requestId = null, string authorizationMethod = "Bearer")
{
return await DoPostPutAsync(HttpMethod.Put, uri, item, authorizationToken, requestId, authorizationToken);
}
public async Task<HttpResponseMessage> DeleteAsync(string uri, string authorizationToken = null, string requestId = null, string authorizationMethod = "Bearer") public async Task<HttpResponseMessage> DeleteAsync(string uri, string authorizationToken = null, string requestId = null, string authorizationMethod = "Bearer")
{ {
var requestMessage = new HttpRequestMessage(HttpMethod.Delete, uri); var requestMessage = new HttpRequestMessage(HttpMethod.Delete, uri);


Loading…
Cancel
Save