/// <summary> /// 同步POST请求 /// </summary> /// <typeparam name="T"></typeparam> /// <typeparam name="D"></typeparam> /// <param name="url"></param> /// <param name="param"></param> /// <param name="timeout"></param> /// <returns></returns> public static HttpResponse PostSync <T, D>(string url, T param = null, double?timeout = null) where T : class, new() where D : class { // 单机测试,使用FakeData生成随机测试数据模拟网络访问 if (AppRunConfigs.Instance.IsSingleTestMode) { var genType = typeof(D); int genNum = -1; if (genType.IsAssignableFrom(typeof(BaseOpResult))) { genNum = 1; } // 生成随机等待时间,模拟网络请求耗时 var randomGenDataCostTime = FakeDataHelper.Instance.GenRandomInt(AppRunConfigs.Instance.DefaultRequestTimeout); // 模拟1/2的请求是要等待长时间,而另外1/2的请求等待短时间 if (randomGenDataCostTime <= AppRunConfigs.Instance.DefaultRequestTimeout / 2) { randomGenDataCostTime = 300; } Thread.Sleep(randomGenDataCostTime); return(ClientFakeDataHelper.Instance.CreateFakeDataNetResponse(genType, genNum)); } HttpContent requestContent = null; if (null != param) { var strJson = JsonHelper.SerializeTo(param); requestContent = new StringContent(strJson); requestContent.Headers.ContentType = new MediaTypeHeaderValue("application/json"); } url = NetHelper.FormatRequestUrl(url); HttpResponse responseMsg = null; var requestDTO = new WebReqResStatisticsDTO() { RequestFullUrl = url, Method = "POST", InTime = DateTime.Now, RequestBody = requestContent?.ToString(), }; try { //SetNetDALTimeout(timeout); var httpResponseTask = s_syncWebClient.PostAsync(url, requestContent); httpResponseTask.Wait(); var httpResponse = httpResponseTask.Result; string responseContent = null; if (httpResponse.IsSuccessStatusCode) { string resultStr = httpResponse.Content.ReadAsStringAsync().Result; responseContent = resultStr; } requestDTO.ResponseBody = responseContent; requestDTO.OutTime = DateTime.Now; requestDTO.Cost = (long)(requestDTO.OutTime - requestDTO.InTime).TotalMilliseconds; responseMsg = new HttpResponse(responseContent, httpResponse.StatusCode); } catch (HttpRequestException ex) { //responseMsg = new HttpResponse(ex.ToString(), HttpStatusCode.ExpectationFailed); responseMsg = new HttpResponse("网络请求异常", HttpStatusCode.ExpectationFailed); responseMsg.ResponseMsg = ex.ToString(); } catch (Exception ex) { //responseMsg = new HttpResponse(ex.ToString(), HttpStatusCode.ExpectationFailed); responseMsg = new HttpResponse("系统异常", HttpStatusCode.ExpectationFailed); responseMsg.ResponseMsg = ex.ToString(); } finally { SLogger.Debug(JsonHelper.SerializeTo(requestDTO)); } return(responseMsg); }
/// <summary> /// 异步POST请求 /// TOFIX:待添加超时逻辑 /// </summary> /// <param name="url"></param> /// <param name="content"></param> /// <param name="callBack"></param> /// <param name="timeout"></param> public static async Task PostContentAsync(string url, HttpContent content, HttpResponseHandler callBack, double?timeout = null) { url = NetHelper.FormatRequestUrl(url); HttpResponse responseMsg = null; var requestDTO = new WebReqResStatisticsDTO() { RequestFullUrl = url, Method = "POST", InTime = DateTime.Now, RequestBody = content?.ToString(), }; try { //SetNetDALTimeout(timeout); if (null == callBack) { // 无回调请求,可以优化成发送之后就不管了 await s_asyncWebClient.PostAsync(url, content); return; } var httpResponse = await s_asyncWebClient.PostAsync(url, content); string responseContent = null; if (httpResponse.IsSuccessStatusCode) { string resultStr = await httpResponse.Content.ReadAsStringAsync(); responseContent = resultStr; } requestDTO.ResponseBody = responseContent; requestDTO.OutTime = DateTime.Now; requestDTO.Cost = (long)(requestDTO.OutTime - requestDTO.InTime).TotalMilliseconds; responseMsg = new HttpResponse(responseContent, httpResponse.StatusCode); } catch (HttpRequestException ex) { //responseMsg = new HttpResponse(ex.ToString(), HttpStatusCode.ExpectationFailed); responseMsg = new HttpResponse("网络请求异常", HttpStatusCode.ExpectationFailed); responseMsg.ResponseMsg = ex.ToString(); } catch (Exception ex) { //responseMsg = new HttpResponse(ex.ToString(), HttpStatusCode.ExpectationFailed); responseMsg = new HttpResponse("系统异常", HttpStatusCode.ExpectationFailed); responseMsg.ResponseMsg = ex.ToString(); } finally { SLogger.Debug(JsonHelper.SerializeTo(requestDTO)); callBack?.Invoke(responseMsg, null); } }