summaryrefslogtreecommitdiffstats
path: root/SendGrid/SendGrid/Client.cs
diff options
context:
space:
mode:
Diffstat (limited to 'SendGrid/SendGrid/Client.cs')
-rw-r--r--SendGrid/SendGrid/Client.cs126
1 files changed, 126 insertions, 0 deletions
diff --git a/SendGrid/SendGrid/Client.cs b/SendGrid/SendGrid/Client.cs
new file mode 100644
index 0000000..0b27872
--- /dev/null
+++ b/SendGrid/SendGrid/Client.cs
@@ -0,0 +1,126 @@
+using System;
+using System.Net.Http;
+using System.Net.Http.Headers;
+using System.Reflection;
+using System.Threading.Tasks;
+using System.Text;
+using SendGrid.Resources;
+using System.Web.Script.Serialization;
+
+namespace SendGrid
+{
+ public class Client
+ {
+ private HttpResponseMessage _response;
+ private String _apiKey;
+ public Uri BaseUri;
+ public APIKeys ApiKeys;
+
+ public Client(String api_key)
+ {
+ BaseUri = new Uri("https://api.sendgrid.com/");
+ _apiKey = api_key;
+ ApiKeys = new APIKeys(this);
+ }
+
+ async Task RequestAsync(String method, String endpoint, Object data)
+ {
+ using (var client = new HttpClient())
+ {
+ try
+ {
+ client.BaseAddress = BaseUri;
+ client.DefaultRequestHeaders.Accept.Clear();
+ client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
+ client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _apiKey);
+ var version = Assembly.GetExecutingAssembly().GetName().Version.ToString();
+ client.DefaultRequestHeaders.TryAddWithoutValidation("User-Agent", "sendgrid/" + version + ";csharp");
+ StringContent content;
+
+ switch (method.ToLower())
+ {
+ case "get":
+ _response = await client.GetAsync(endpoint);
+ break;
+ case "post":
+ content = new StringContent(data.ToString(), Encoding.UTF8, "application/json");
+ _response = await client.PostAsJsonAsync(endpoint, data);
+ break;
+ case "patch":
+ endpoint = BaseUri + endpoint.Remove(0, 1);
+ content = new StringContent(data.ToString(), Encoding.UTF8, "application/json");
+ HttpRequestMessage request = new HttpRequestMessage
+ {
+ Method = new HttpMethod("PATCH"),
+ RequestUri = new Uri(endpoint),
+ Content = content
+ };
+ _response = await client.SendAsync(request);
+ break;
+ case "delete":
+ _response = await client.DeleteAsync(endpoint);
+ break;
+ default:
+ _response = null;
+ break;
+ }
+
+ if (_response == null)
+ {
+ //Console.WriteLine("Bad method call: " + method);
+ //Console.ReadKey();
+ }
+ string responseBodyAsText = await _response.Content.ReadAsStringAsync();
+ responseBodyAsText = responseBodyAsText.Replace("<br>", Environment.NewLine);
+ if (_response.IsSuccessStatusCode)
+ {
+ //Console.WriteLine(_response.StatusCode);
+ //Console.WriteLine(responseBodyAsText);
+ //Console.ReadKey();
+ }
+ else
+ {
+ //Console.WriteLine(responseBodyAsText);
+ //Console.ReadKey();
+ }
+ }
+ catch (HttpRequestException hre)
+ {
+ //Console.WriteLine(hre.ToString());
+ //Console.ReadKey();
+ }
+ catch (Exception ex)
+ {
+ //Console.WriteLine(ex.ToString());
+ //Console.ReadKey();
+ }
+ }
+ }
+
+ public HttpResponseMessage Get(String endpoint)
+ {
+ RequestAsync("GET", endpoint, null).Wait();
+ return _response;
+ }
+
+ public HttpResponseMessage Post(String endpoint, object data)
+ {
+ RequestAsync("POST", endpoint, data).Wait();
+ return _response;
+ }
+
+ public HttpResponseMessage Delete(String endpoint)
+ {
+ RequestAsync("DELETE", endpoint, null).Wait();
+ return _response;
+ }
+
+ public HttpResponseMessage Patch(String endpoint, object data)
+ {
+ var json = new JavaScriptSerializer().Serialize(data);
+ RequestAsync("PATCH", endpoint, json).Wait();
+ return _response;
+ }
+
+ }
+}