using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Net; using System.Net.Http; using System.Text; namespace iWareCommon.Utils { public class HTTPService { private string BaseURI = ""; public HTTPService(string baseURI) { this.BaseURI = baseURI; } #region GET调用webapi公共方法 /// /// 通过GET方法调用HTTP服务 /// /// 入参类型 /// 服务地址 /// 发起请求的行为标识 /// 超时时间,单位:秒,默认为30秒 /// public T getContent(string url, Guid requestId, int timeout = 30) { try { //SSLUtil.SetCertificatePolicy2(); var client = new HttpClient(); client.BaseAddress = new Uri(this.BaseURI); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")); client.DefaultRequestHeaders.Add("RequestId", requestId.ToString()); client.Timeout = new TimeSpan(0, 0, timeout); using (HttpResponseMessage response = client.GetAsync(url).Result) { if (response.IsSuccessStatusCode) { var str_result = response.Content.ReadAsStringAsync().Result; T result = JsonConvert.DeserializeObject(str_result); return result; } else if (response.StatusCode == HttpStatusCode.InternalServerError) { throw new Exception("{" + this.BaseURI + "}被调用的HTTP服务接口{" + url + "}内部发生异常"); } else { throw new Exception("{" + this.BaseURI + "}被调用的HTTP服务接口{" + url + "}内部发生异常{" + response.StatusCode + "}"); } } } catch { throw; } } /// /// 通过GET方法调用HTTP服务 /// /// 服务地址 /// 发起请求的行为标识 /// 超时时间,单位:秒,默认为30秒 /// public string getContentForString(string url, Guid requestId, int timeout = 30) { try { //SSLUtil.SetCertificatePolicy2(); var client = new HttpClient(); client.BaseAddress = new Uri(this.BaseURI); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")); client.DefaultRequestHeaders.Add("RequestId", requestId.ToString()); client.Timeout = new TimeSpan(0, 0, timeout); using (HttpResponseMessage response = client.GetAsync(url).Result) { if (response.IsSuccessStatusCode) { var result = response.Content.ReadAsStringAsync().Result; return result; } else if (response.StatusCode == HttpStatusCode.InternalServerError) { throw new Exception("{" + this.BaseURI + "}被调用的HTTP服务接口{" + url + "}内部发生异常,response:" + JsonConvert.SerializeObject(response)); } else { throw new Exception("{" + this.BaseURI + "}被调用的HTTP服务接口{" + url + "}内部发生异常{" + response.StatusCode + "},response:" + JsonConvert.SerializeObject(response)); } } } catch { throw; } } #endregion #region POST调用webapi公共方法 /// /// 通过POST方法调用HTTP服务 /// /// 入参类型 /// 出参类型 /// 服务地址 /// 入参 /// 发起请求的行为标识 /// 超时时间,单位:秒,默认为30秒 /// public T2 postContent(string url, T parameter, Guid requestId, int timeout = 30) { try { //SSLUtil.SetCertificatePolicy2(); var client = new HttpClient(); client.BaseAddress = new Uri(this.BaseURI); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")); client.DefaultRequestHeaders.Add("RequestId", requestId.ToString()); client.DefaultRequestHeaders.Add("Authorization", "123456"); client.Timeout = new TimeSpan(0, 0, timeout); string str = JsonConvert.SerializeObject(parameter); var httpContent = new StringContent(str, Encoding.UTF8); httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json") { CharSet = "utf-8" }; using (HttpResponseMessage response = client.PostAsync(url, httpContent).Result) { if (response.IsSuccessStatusCode) { var str_result = response.Content.ReadAsStringAsync().Result; T2 result = JsonConvert.DeserializeObject(str_result); return result; } else if (response.StatusCode == HttpStatusCode.InternalServerError) { throw new Exception("{" + this.BaseURI + "}被调用的HTTP服务接口{" + url + "}内部发生异常"); } else { throw new Exception("{" + this.BaseURI + "}被调用的HTTP服务接口{" + url + "}内部发生异常{" + response.StatusCode + "}"); } } } catch { throw; } } /// /// 通过POST方法调用HTTP服务 /// /// 服务地址 /// 入参 /// 发起请求的行为标识 /// 超时时间,单位:秒,默认为30秒 /// public string postContentForString(string url, IDictionary parameter, string token, int timeout = 30) { try { //SSLUtil.SetCertificatePolicy2(); var client = new HttpClient(); client.BaseAddress = new Uri(this.BaseURI); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")); //client.DefaultRequestHeaders.Add("Token", token.ToString()); client.Timeout = new TimeSpan(0, 0, timeout); string str = JsonConvert.SerializeObject(parameter); var httpContent = new StringContent(str, Encoding.UTF8); httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json") { CharSet = "utf-8" }; using (HttpResponseMessage response = client.PostAsync(url, httpContent).Result) { if (response.IsSuccessStatusCode) { var result = response.Content.ReadAsStringAsync().Result; return result; } else if (response.StatusCode == HttpStatusCode.InternalServerError) { return response.StatusCode.ToString(); // throw new Exception("{" + this.BaseURI + "}被调用的HTTP服务接口{" + url + "}内部发生异常"); } else { return response.StatusCode.ToString(); // throw new Exception("{" + this.BaseURI + "}被调用的HTTP服务接口{" + url + "}内部发生异常{" + response.StatusCode + "}"); } } } catch { throw; } } /// /// 通过POST方法调用HTTP服务 /// /// 服务地址 /// 入参字符串 /// 发起请求的行为标识 /// 超时时间,单位:秒,默认为30秒 /// public string postContentForString(string url, string parameter, string token, int timeout = 30) { try { // SSLUtil.SetCertificatePolicy_New(); var client = new HttpClient(); client.BaseAddress = new Uri(this.BaseURI); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")); //client.DefaultRequestHeaders.Add("Token", token.ToString()); client.Timeout = new TimeSpan(0, 0, timeout); var ee = new { name = parameter }; if (parameter == "") { parameter = ee.ToString(); } var httpContent = new StringContent(parameter, Encoding.UTF8); httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json") { CharSet = "utf-8" }; using (HttpResponseMessage response = client.PostAsync(url, httpContent).Result) { if (response.IsSuccessStatusCode) { var result = response.Content.ReadAsStringAsync().Result; return result; } else if (response.StatusCode == HttpStatusCode.InternalServerError) { return response.StatusCode.ToString(); // throw new Exception("{" + this.BaseURI + "}被调用的HTTP服务接口{" + url + "}内部发生异常"); } else { return response.StatusCode.ToString(); // throw new Exception("{" + this.BaseURI + "}被调用的HTTP服务接口{" + url + "}内部发生异常{" + response.StatusCode + "}"); } } } catch (Exception ex) { throw; } } /// /// 通过POST方法调用HTTP服务(AGV专用) /// /// 服务地址 /// 入参字符串 /// 发起请求的行为标识 /// 超时时间,单位:秒,默认为30秒 /// public string postContentForStringForAgv(string url, string parameter, Guid requestId, int timeout = 30) { try { //SSLUtil.SetCertificatePolicy2(); var client = new HttpClient(); client.BaseAddress = new Uri(this.BaseURI); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")); client.DefaultRequestHeaders.Add("RequestId", requestId.ToString()); client.Timeout = new TimeSpan(0, 0, timeout); var ee = new { name = parameter }; if (parameter == "") { parameter = ee.ToString(); } var httpContent = new StringContent(parameter, Encoding.UTF8); httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json") { CharSet = "utf-8" }; using (HttpResponseMessage response = client.PostAsync(url, httpContent).Result) { var result = response.Content.ReadAsStringAsync().Result; return result; } } catch (Exception ex) { throw; } } /// /// 通过POST方法调用HTTP服务 /// /// 服务地址 /// 入参字符串 /// 发起请求的行为标识 /// 超时时间,单位:秒,默认为30秒 /// public string postContentForStringWithToken(string url, string parameter, Guid requestId, string token, int timeout = 30) { try { //SSLUtil.SetCertificatePolicy2(); var client = new HttpClient(); client.BaseAddress = new Uri(this.BaseURI); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")); client.DefaultRequestHeaders.Add("RequestId", requestId.ToString()); client.DefaultRequestHeaders.Add("Authorization", token.ToString()); client.Timeout = new TimeSpan(0, 0, timeout); var httpContent = new StringContent(parameter, Encoding.UTF8); httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json") { CharSet = "utf-8" }; using (HttpResponseMessage response = client.PostAsync(url, httpContent).Result) { if (response.IsSuccessStatusCode) { var result = response.Content.ReadAsStringAsync().Result; return result; } else if (response.StatusCode == HttpStatusCode.InternalServerError) { throw new Exception("{" + this.BaseURI + "}被调用的HTTP服务接口{" + url + "}内部发生异常"); } else { throw new Exception("{" + this.BaseURI + "}被调用的HTTP服务接口{" + url + "}内部发生异常{" + response.StatusCode + "}"); } } } catch { throw; } } #endregion #region PUT调用webapi公共方法 /// /// 通过PUT方法调用HTTP服务 /// /// 入参类型 /// 出参类型 /// 服务地址 /// 入参 /// 发起请求的行为标识 /// 超时时间,单位:秒,默认为30秒 /// public T2 putContent(string url, T parameter, Guid requestId, int timeout = 30) { try { //SSLUtil.SetCertificatePolicy2(); var client = new HttpClient(); client.BaseAddress = new Uri(this.BaseURI); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")); client.DefaultRequestHeaders.Add("RequestId", requestId.ToString()); client.Timeout = new TimeSpan(0, 0, timeout); string str = JsonConvert.SerializeObject(parameter); var httpContent = new StringContent(str, Encoding.UTF8); httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json") { CharSet = "utf-8" }; using (HttpResponseMessage response = client.PutAsync(url, httpContent).Result) { if (response.IsSuccessStatusCode) { var str_result = response.Content.ReadAsStringAsync().Result; T2 result = JsonConvert.DeserializeObject(str_result); return result; } else if (response.StatusCode == HttpStatusCode.InternalServerError) { throw new Exception("{" + this.BaseURI + "}被调用的HTTP服务接口{" + url + "}内部发生异常"); } else { throw new Exception("{" + this.BaseURI + "}被调用的HTTP服务接口{" + url + "}内部发生异常{" + response.StatusCode + "}"); } } } catch { throw; } } /// /// 通过PUT方法调用HTTP服务 /// /// 服务地址 /// 入参 /// 发起请求的行为标识 /// 超时时间,单位:秒,默认为30秒 /// public string putContentForString(string url, IDictionary parameter, Guid requestId, int timeout = 30) { try { //SSLUtil.SetCertificatePolicy2(); var client = new HttpClient(); client.BaseAddress = new Uri(this.BaseURI); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")); client.DefaultRequestHeaders.Add("RequestId", requestId.ToString()); client.Timeout = new TimeSpan(0, 0, timeout); string str = JsonConvert.SerializeObject(parameter); var httpContent = new StringContent(str, Encoding.UTF8); httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json") { CharSet = "utf-8" }; using (HttpResponseMessage response = client.PutAsync(url, httpContent).Result) { if (response.IsSuccessStatusCode) { var result = response.Content.ReadAsStringAsync().Result; return result; } else if (response.StatusCode == HttpStatusCode.InternalServerError) { throw new Exception("{" + this.BaseURI + "}被调用的HTTP服务接口{" + url + "}内部发生异常"); } else { throw new Exception("{" + this.BaseURI + "}被调用的HTTP服务接口{" + url + "}内部发生异常{" + response.StatusCode + "}"); } } } catch { throw; } } /// /// 通过POST方法调用HTTP服务 /// /// 服务地址 /// 入参字符串 /// 发起请求的行为标识 /// 超时时间,单位:秒,默认为30秒 /// public string putContentForString(string url, string parameter, Guid requestId, int timeout = 30) { try { //SSLUtil.SetCertificatePolicy2(); var client = new HttpClient(); client.BaseAddress = new Uri(this.BaseURI); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")); client.DefaultRequestHeaders.Add("RequestId", requestId.ToString()); client.Timeout = new TimeSpan(0, 0, timeout); var httpContent = new StringContent(parameter, Encoding.UTF8); httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json") { CharSet = "utf-8" }; using (HttpResponseMessage response = client.PutAsync(url, httpContent).Result) { if (response.IsSuccessStatusCode) { var result = response.Content.ReadAsStringAsync().Result; return result; } else if (response.StatusCode == HttpStatusCode.InternalServerError) { throw new Exception("{" + this.BaseURI + "}被调用的HTTP服务接口{" + url + "}内部发生异常"); } else { throw new Exception("{" + this.BaseURI + "}被调用的HTTP服务接口{" + url + "}内部发生异常{" + response.StatusCode + "}"); } } } catch { throw; } } #endregion } }