private string GetTargetUrl(ApiRequestTarget reqTarget) { var url = reqTarget == ApiRequestTarget.Auth ? settings.ApiAuthEndpoint : settings.ApiEndpoint; if (!url.EndsWith("/")) { url += "/"; } url += reqTarget + "/"; if (!string.IsNullOrEmpty(identifier)) { url += $"{identifier}/"; } if (!string.IsNullOrEmpty(method)) { url += $"{method}/"; } if (parameters == null) { return(url); } var parameterString = string.Join("/", parameters.Where(x => string.IsNullOrEmpty(x.Key)).Select(x => x.Value)); if (!string.IsNullOrEmpty(parameterString)) { url += $"{parameterString}"; } return(url); }
private string GetTargetUrl(ApiRequestTarget reqTarget) { // http(s)://server:1111/api/ var url = settings.ApiEndpoint; if (!url.EndsWith("/")) { url += "/"; } url += reqTarget + "/"; if (!string.IsNullOrEmpty(identifier)) { url += $"{identifier}/"; } if (!string.IsNullOrEmpty(method)) { url += $"{method}/"; } if (parameters == null) { return(url); } var parameterString = string.Join("/", parameters.Where(x => string.IsNullOrEmpty(x.Key))); if (!string.IsNullOrEmpty(parameterString)) { url += $"/{parameterString}"; } return(url); }
public async Task <TResult> SendAsync <TResult, TModel>(ApiRequestTarget reqTarget, ApiRequestType type, TModel model) { if (IntegrityCheck.IsCompromised) { return(default(TResult)); } // string target, string method, var target = GetTargetUrl(reqTarget); var request = (HttpWebRequest)WebRequest.CreateDefault(new Uri(target, UriKind.Absolute)); var requestData = ""; //request.Accept = "application/json"; if (reqTarget == ApiRequestTarget.Game || reqTarget == ApiRequestTarget.Players) { request.Timeout = 25000; } request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36"; request.Method = GetMethod(type); request.CookieContainer = cookieContainer; request.ServerCertificateValidationCallback += (sender, certificate, chain, errors) => true; if (authToken != null) { request.Headers["auth-token"] = JsonConvert.SerializeObject(authToken).Base64Encode(); } if (sessionToken != null) { request.Headers["session-token"] = JsonConvert.SerializeObject(sessionToken).Base64Encode(); } if (parameters != null) { var named = parameters.Where(x => !string.IsNullOrEmpty(x.Key)).ToList(); if (model != null) { foreach (var param in named) { request.Headers[param.Key] = param.Value; } } else if (named.Count > 0) { requestData = "{" + string.Join(",", named.Select(x => "\"" + x.Key + "\": " + x.Value)) + "}"; } } if (model != null) { requestData = JsonConvert.SerializeObject(model); } if (!string.IsNullOrEmpty(requestData)) { request.ContentType = "application/json"; request.ContentLength = Encoding.UTF8.GetByteCount(requestData); using (var reqStream = await request.GetRequestStreamAsync()) using (var writer = new StreamWriter(reqStream)) { await writer.WriteAsync(requestData); await writer.FlushAsync(); } } try { using (var response = await request.GetResponseAsync()) using (var resStream = response.GetResponseStream()) using (var reader = new StreamReader(resStream)) { if (((HttpWebResponse)response).StatusCode == HttpStatusCode.Forbidden) { return(default(TResult)); } if (typeof(TResult) == typeof(object)) { return(default(TResult)); } var responseData = await reader.ReadToEndAsync(); return(JsonConvert.DeserializeObject <TResult>(responseData)); } } catch (Exception exc) { return(default(TResult)); } }
public Task SendAsync(ApiRequestTarget target, ApiRequestType type) { return(SendAsync <object>(target, type)); }
public Task <TResult> SendAsync <TResult>(ApiRequestTarget reqTarget, ApiRequestType type) { return(SendAsync <TResult, object>(reqTarget, type, null)); }
public async Task <TResult> SendAsync <TResult, TModel>(ApiRequestTarget reqTarget, ApiRequestType type, TModel model) { // string target, string method, var target = GetTargetUrl(reqTarget); var request = (HttpWebRequest)WebRequest.CreateDefault(new Uri(target, UriKind.Absolute)); var requestData = ""; request.Method = GetMethod(type); request.CookieContainer = cookieContainer; request.ServerCertificateValidationCallback += (sender, certificate, chain, errors) => true; if (authToken != null) { request.Headers["auth-token"] = Base64Encode(JSON.Stringify(authToken)); } if (sessionToken != null) { request.Headers["session-token"] = Base64Encode(JSON.Stringify(sessionToken)); } if (parameters != null) { var named = this.parameters.Where(x => !string.IsNullOrEmpty(x.Key)).ToList(); if (model != null) { foreach (var param in named) { request.Headers[param.Key] = param.Value; } } else if (named.Count > 0) { requestData = "{" + string.Join(",", named.Select(x => "\"" + x.Key + "\": " + x.Value)) + "}"; } } if (model != null) { requestData = JSON.Stringify(model); } if (!string.IsNullOrEmpty(requestData)) { request.ContentType = "application/json"; request.ContentLength = Encoding.UTF8.GetByteCount(requestData); using (var reqStream = await request.GetRequestStreamAsync()) using (var writer = new StreamWriter(reqStream)) { await writer.WriteAsync(requestData); await writer.FlushAsync(); } } using (var response = await request.GetResponseAsync()) using (var resStream = response.GetResponseStream()) using (var reader = new StreamReader(resStream)) { if (typeof(TResult) == typeof(object)) { return(default(TResult)); } var responseData = await reader.ReadToEndAsync(); return(JSON.Parse <TResult>(responseData)); } }