/// <summary> /// /// </summary> /// <returns></returns> public Task <string> Handle() { var rlt = Task.Run <string>(() => { return(""); }); Result = new ApiResult <IResponse> { node = XCore.WebNode, code = "-1", success = false, message = "unkown error" }; if (string.IsNullOrEmpty(ApiHost)) { Result.code = "400"; Result.message = "request host not set"; } else if (string.IsNullOrEmpty(ApiPath)) { Result.code = "400"; Result.message = "request path not set"; } else { System.Net.Http.HttpClient http = null; Task <System.Net.Http.HttpResponseMessage> task = null; if (Certificate == null) { http = new System.Net.Http.HttpClient(); } else { var handler = new System.Net.Http.HttpClientHandler(); handler.ClientCertificateOptions = System.Net.Http.ClientCertificateOption.Manual; handler.SslProtocols = System.Security.Authentication.SslProtocols.Tls12; handler.ClientCertificates.Add(Certificate); http = new System.Net.Http.HttpClient(handler); } http.BaseAddress = new System.Uri(ApiHost); if (Method == "GET") { var query = RequestBody as string; if (!string.IsNullOrEmpty(query)) { var link = ApiPath.IndexOf('?') < 0 ? '?' : '&'; ApiPath += query[0] == '?' || query[0] == '&' ? query : link + query; } if (HttpRequestHeaders != null) { foreach (var kv in HttpRequestHeaders) { http.DefaultRequestHeaders.Add(kv.Key, kv.Value); } } task = http.GetAsync(ApiPath); } else { System.Net.Http.HttpContent content = null; var text = RequestBody as string; var bytes = RequestBody as byte[]; if (bytes != null) { content = new System.Net.Http.ByteArrayContent(bytes); } else if (!string.IsNullOrEmpty(text)) { content = new System.Net.Http.StringContent(text, Encoding, ContentType); } else if (RequestBody != null) { content = new System.Net.Http.StringContent(Json.ToString(RequestBody), Encoding, ContentType); } else { content = new System.Net.Http.ByteArrayContent(new byte[0]); } if (HttpRequestHeaders != null) { foreach (var kv in HttpRequestHeaders) { content.Headers.Add(kv.Key, kv.Value); } } task = http.PostAsync(ApiPath, content); } task.Result.Content.ReadAsStringAsync().ContinueWith((res) => { ResponseBody = res.Result; HttpResponseHeaders = new Dictionary <string, string>(); foreach (var item in task.Result.Headers) { var em = item.Value.GetEnumerator(); if (em.MoveNext()) { HttpResponseHeaders.Add(item.Key.ToLower(), em.Current); } } rlt = Task.Run <string>(() => { return(res.Result); }); }).Wait(); } return(rlt); }