85 lines
2.5 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
}
|