public static async Task <HttpClientResult <T> > SendRequestAsync <T>( this HttpClient httpClient, HttpRequest request, ClientConfig clientConfig, string path, HttpMethod method, object data = null, CurrentProcess process = null) { var response = await _sendRequestAsync(httpClient, request, clientConfig, path, method, data, process).ConfigureAwait(false); if (response != null) { var result = JsonConvert.DeserializeObject <T>(response.Item2); if (result is ResponseJsonModel) { var obj = result as ResponseJsonModel; if (obj?.error?.code != null) { obj.error.message = "error"; } } return(HttpClientResult <T> .Create(response.Item1, result, response.Item3, response.Item4)); } else { return(HttpClientResult <T> .Create(response.Item1, TypeExtensions.GetDefaultValue <T>(), null, false)); } }
public static async Task <HttpClientResult <string> > SendRequestAsync( this HttpClient httpClient, HttpRequest request, ClientConfig clientConfig, string path, HttpMethod method, object data = null, CurrentProcess process = null) { var result = await _sendRequestAsync(httpClient, request, clientConfig, path, method, data, process).ConfigureAwait(false); return(result != null ? HttpClientResult <string> .Create(result.Item1, result.Item2, result.Item3, result.Item4) : HttpClientResult <string> .Create(result.Item1, string.Empty, null, false)); }
public async Task Invoke(HttpContext httpContext, CurrentProcess process) { var raw = httpContext.Session.Get(SESSION_KEY); if (raw == null) { var user = httpContext.GetUserInfo(); if (user == null) { await _next(httpContext); return; } raw = Utils.ToBinary(user); httpContext.Session.Set(SESSION_KEY, raw); } AccountModel account = new AccountModel(Utils.FromBinary(raw)); process.CurrentAccount = account; await _next(httpContext); }
private static async Task <IActionResult> Call(this HttpClient httpClient, ClientConfig clientConfig, HttpRequest request, HttpMethod method, string path = "/", object param = null, object data = null, CurrentProcess process = null) { if (param != null) { path = path.AddQuery(param); } var url = $"{clientConfig.ServiceUrl}{path}"; var requestMessage = new HttpRequestMessage(method, url); string json = null; HttpContent content = null; if (data != null) { if (data is string) { content = new StringContent((string)data, Encoding.UTF8, "application/json"); } else if (data is IDictionary <string, object> ) { var formData = new MultipartFormDataContent(); foreach (var pair in data as IDictionary <string, object> ) { if (pair.Value is byte[]) { formData.Add(new ByteArrayContent(pair.Value as byte[]), pair.Key, pair.Key); } else { formData.Add(new StringContent(pair.Value.ToString()), pair.Key); } } content = formData; } else { json = JsonConvert.SerializeObject(data, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }); content = new StringContent(json, Encoding.UTF8, "application/json"); } } var signature = string.Empty; var originalData = string.Empty; if (method == HttpMethod.Get) { var list = new List <string>(); if (url.Contains("?")) { foreach (var q in url.Split('?')[1].Split('&')) { if (q.Contains("=")) { list.Add(q.Split('=')[1]); } } } originalData = string.Join(string.Empty, list); } else if (data != null) { originalData = json; } if (string.IsNullOrWhiteSpace(originalData)) { originalData = string.Empty; } signature = Utils.HmacSha256(clientConfig.ApiKey + originalData, clientConfig.SecretKey); string personId = process != null ? process.CurrentAccount.Account.PersonId : string.Empty; requestMessage.Headers.Add("X-my8-Key", clientConfig.ApiKey); requestMessage.Headers.Add("X-my8-Signature", signature); requestMessage.Headers.Add("X-my8-PersonId", personId); requestMessage.Content = content; var response = await httpClient.SendAsync(requestMessage).ConfigureAwait(false); response.EnsureSuccessStatusCode(); return(new HttpContentActionResult(response.Content)); }
public static async Task <IActionResult> Put(this HttpClient httpClient, ClientConfig clientConfig, HttpRequest request, string path = "/", object param = null, object data = null, CurrentProcess process = null) { return(await httpClient.Call(clientConfig, request, HttpMethod.Put, path, param, data, process)); }
private static async Task <Tuple <HttpStatusCode, string, string, bool> > _sendRequestAsync( HttpClient httpClient, HttpRequest request, ClientConfig clientConfig, string path, HttpMethod method, object data, CurrentProcess process = null) { var url = $"{clientConfig.ServiceUrl}{path}"; var requestMessage = new HttpRequestMessage(method, url); string json = null; HttpContent content = null; if (data != null) { if (data is string) { content = new StringContent((string)data, Encoding.UTF8, "application/json"); } else if (data is IDictionary <string, object> ) { var formData = new MultipartFormDataContent(); foreach (var pair in data as IDictionary <string, object> ) { if (pair.Value is byte[]) { formData.Add(new ByteArrayContent(pair.Value as byte[]), pair.Key, pair.Key); } else { formData.Add(new StringContent(pair.Value.ToString()), pair.Key); } } content = formData; } else { json = JsonConvert.SerializeObject(data, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }); content = new StringContent(json, Encoding.UTF8, "application/json"); } } requestMessage.Content = content; #region signature var originalData = string.Empty; if (method == HttpMethod.Get) { var list = new List <string>(); if (url.Contains("?")) { foreach (var q in url.Split('?')[1].Split('&')) { if (q.Contains("=")) { list.Add(q.Split('=')[1]); } } } originalData = string.Join(string.Empty, list); } else if (data != null) { originalData = json; } if (string.IsNullOrWhiteSpace(originalData)) { originalData = string.Empty; } var signature = string.Empty; signature = Utils.HmacSha256(clientConfig.ApiKey + originalData, clientConfig.SecretKey); string personId = process != null ? process.CurrentAccount.Account.PersonId : string.Empty; #endregion requestMessage.Headers.Add("X-my8-Key", clientConfig.ApiKey); requestMessage.Headers.Add("X-my8-Signature", signature); requestMessage.Headers.Add("X-my8-PersonId", personId); using (var response = await httpClient.SendAsync(requestMessage)) { if (response.Content != null) { var responseData = response.StatusCode == HttpStatusCode.Moved || response.StatusCode == HttpStatusCode.Found ? response.Headers.Location.AbsoluteUri : await response.Content.ReadAsStringAsync().ConfigureAwait(false); return(new Tuple <HttpStatusCode, string, string, bool>( response.StatusCode, responseData, response.Headers?.ETag?.Tag, response.StatusCode == HttpStatusCode.NotModified)); } else { throw new Exception($"request to {url} error {response.StatusCode}"); } } }