namespace LaaProduction.Http { using LaaProduction.Http.Interfaces; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Net.Http; using System.Net.Http.Headers; public class HttpClient : IHttpClient { private static readonly System.Net.Http.HttpClient http = new System.Net.Http.HttpClient(); private Uri baseURL; public HttpClient() { } public HttpClient(String baseURL) => this.BaseURL(baseURL); public void BaseURL(String baseURL) => this.baseURL = new Uri(baseURL, UriKind.Absolute); public HttpResponse DELETE(String url, String bearer = null) => this.HttpRequestHandler(HttpMethod.Delete, url, bearer: bearer); public HttpResponse DELETE(String url) => this.HttpRequestHandler(HttpMethod.Delete, url); public HttpResponse GET(String url, String bearer = null) => this.HttpRequestHandler(HttpMethod.Get, url, bearer: bearer); public HttpResponse GET(String url) => this.HttpRequestHandler(HttpMethod.Get, url); public HttpResponse POST(String url, String bearer = null, Object body = null) => this.HttpRequestHandler(HttpMethod.Post, url, bearer: bearer, body: body); public HttpResponse POST(String url) => this.HttpRequestHandler(HttpMethod.Post, url); public HttpResponse POST(String url, Object body) => this.HttpRequestHandler(HttpMethod.Post, url, body: body); public HttpResponse POST(String url, String bearer) => this.HttpRequestHandler(HttpMethod.Post, url, bearer: bearer); public HttpResponse PUT(String url, String bearer = null, Object body = null) => this.HttpRequestHandler(HttpMethod.Put, url, bearer: bearer, body: body); public HttpResponse PUT(String url) => this.HttpRequestHandler(HttpMethod.Post, url); public HttpResponse PUT(String url, Object body) => this.HttpRequestHandler(HttpMethod.Put, url, body: body); public HttpResponse PUT(String url, String bearer) => this.HttpRequestHandler(HttpMethod.Put, url, bearer: bearer); private HttpResponse HttpRequestHandler(HttpMethod method, String url, String bearer = null, Object body = null) { var result = default(HttpResponse); var uri = default(Uri); try { uri = new Uri(this.baseURL, new Uri(url, UriKind.Relative)); } catch (Exception) { uri = new Uri(url); } try { using (var request = new HttpRequestMessage(method, uri)) { if (body != null) { request.Content = new StringContent(JsonConvert.SerializeObject(body)); request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); } if (!String.IsNullOrWhiteSpace(bearer)) { http.DefaultRequestHeaders .Authorization = new AuthenticationHeaderValue("Bearer", bearer); } using (var response = http.SendAsync(request).Result) { using (var content = response.Content) { var text = content.ReadAsStringAsync().Result; if (response.IsSuccessStatusCode) { result = JsonConvert.DeserializeObject(text); } else { result = JsonConvert.DeserializeObject>(text); } } } } } catch (Exception e) { result = e; } return result; } } }