SaiChaitanya's picture
Upload 149 files
a431caa verified
raw
history blame
3.4 kB
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text.Json.Nodes;
public class OnetWebService
{
public class QueryParams : IEnumerable<KeyValuePair<string, string>>
{
private List<KeyValuePair<string, string>> internalParams = new List<KeyValuePair<string, string>>();
public IEnumerator<KeyValuePair<string, string>> GetEnumerator() => internalParams.GetEnumerator();
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => internalParams.GetEnumerator();
public void Add(string key, string value) => internalParams.Add(new KeyValuePair<string, string>(key, value));
}
private string baseURL;
private HttpClient client;
private static string EncodeAuth(string username, string password)
{
return Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes(username + ":" + password));
}
public OnetWebService(string username, string password)
{
HttpClientHandler handler = new HttpClientHandler()
{
AllowAutoRedirect = false,
};
client = new HttpClient(handler);
client.Timeout = new TimeSpan(0, 0, 10);
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.UserAgent.ParseAdd("dotnet-OnetWebService/1.00 (bot)");
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", EncodeAuth(username, password));
SetVersion();
}
public void SetVersion(string version = "")
{
if (version == "")
{
baseURL = "https://services.onetcenter.org/ws/";
}
else
{
baseURL = "https://services.onetcenter.org/ws/v" + version + "/ws/";
}
}
public async Task<JsonNode> Call(string path, QueryParams query = null)
{
List<string> encoded_params = new List<string>();
if (query != null)
{
foreach (KeyValuePair<string, string> pair in query)
{
encoded_params.Add(System.Net.WebUtility.UrlEncode(pair.Key) + "=" + System.Net.WebUtility.UrlEncode(pair.Value));
}
}
string url = baseURL + path;
if (encoded_params.Count > 0)
{
url += "?" + String.Join("&", encoded_params.ToArray());
}
JsonNode result = new JsonObject
{
["error"] = "Call to " + url + " failed with unknown reason"
};
try
{
HttpResponseMessage response = await client.GetAsync(url);
if (response.StatusCode == (System.Net.HttpStatusCode)200 || response.StatusCode == (System.Net.HttpStatusCode)422)
{
result = JsonNode.Parse(await response.Content.ReadAsStringAsync());
}
else
{
result["error"] = "Call to " + url + " failed with error code " + ((int)response.StatusCode).ToString();
}
}
catch (HttpRequestException e)
{
result["error"] = "Call to " + url + " failed with reason: " + e.Message;
}
return result;
}
}