Example #1
0
        /// <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);
        }
Example #2
0
        /// <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);
            }
        }