Files
BeWoPlaner/Shared/Core/Facade/HttpClientFacade.cs

85 lines
2.5 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
namespace BS.Shared.Core.Facade
{
public class HttpClientFacade
{
public string Base_Url { get; set; }
public HttpMethod Method { get; set; } = HttpMethod.Get;
public Dictionary<string, string> Headers { get; set; } = new Dictionary<string, string>();
public Dictionary<string, string> Parameters { get; set; } = new Dictionary<string, string>();
public string ContentType { get; set; } = "application/x-www-form-urlencoded";
public Encoding Encoding { get; set; } = Encoding.UTF8;
public TimeSpan Timeout { get; set; } = TimeSpan.FromSeconds(30);
public HttpClientFacade(string base_url)
{
if (string.IsNullOrEmpty(base_url))
throw new ArgumentNullException("HttpClient: base_url is missing");
Base_Url = base_url;
}
public virtual async Task<byte[]> SendAsync(string method)
{
using (var client = new HttpClient { Timeout = Timeout })
{
var requestUri = Utilities.WebUtils.CombineUrl(Base_Url, method);
if (Method == HttpMethod.Get && Parameters.Count > 0)
{
var query = string.Join("&", Parameters.Select(p => $"{Uri.EscapeDataString(p.Key)}={Uri.EscapeDataString(p.Value)}"));
requestUri += (Base_Url.Contains("?") ? "&" : "?") + query;
}
using (var request = new HttpRequestMessage(Method, requestUri))
{
// Add headers
foreach (var header in Headers)
request.Headers.TryAddWithoutValidation(header.Key, header.Value);
// Add body if POST or PUT
if (Method == HttpMethod.Post || Method == HttpMethod.Put)
{
var content = new FormUrlEncodedContent(Parameters);
var bytes = await content.ReadAsByteArrayAsync().ConfigureAwait(false);
request.Content = new ByteArrayContent(bytes);
request.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue(ContentType);
}
var response = await client.SendAsync(request).ConfigureAwait(false);
response.EnsureSuccessStatusCode();
var responseBytes = await response.Content.ReadAsByteArrayAsync().ConfigureAwait(false);
return responseBytes;
}
}
}
public void SetToken(string token)
{
if(string.IsNullOrWhiteSpace(token))
throw new ArgumentNullException("HttpClient: base_url is missing");
var key = nameof(HttpRequestHeader.Authorization);
if (Headers.ContainsKey(key))
{
Headers[key] = token;
}
else
{
Headers.Add(key, token);
}
}
}
}