Beispiel #1
0
        /// <summary>
        ///  GET 字符串数据获取(同步),同时获取状态码,按状态码识别是否成功。
        /// </summary>
        /// <param name="url">地址</param>
        /// <param name="statusCode">状态码</param>
        /// <param name="parms">参数对列表</param>
        /// <returns></returns>
        public static String GetStringWithInfo(String app, String url, out CustomException ce, List <KeyValuePair <String, String> > parmList = null)
        {
            String result  = String.Empty;
            String urlcomp = GetUrl(app, url);

            if (parmList != null && parmList.Count > 0)
            {
                urlcomp = AppendUrlWithParameter(urlcomp, parmList);
            }
            try
            {
                SetHeader();
                HttpResponseMessage response = _HttpClient.GetAsync(urlcomp).Result;
                String statusCode            = response.StatusCode.ToString();
                result = response.Content.ReadAsStringAsync().Result;
                if (response.IsSuccessStatusCode)
                {
                    GetToken(response);
                    ce = null;
                }
                else if (statusCode.Equals("Conflict")) //业务错误
                {
                    CustomExceptionInfo info = JsonConvert.DeserializeObject <CustomExceptionInfo>(result);
                    ce = new CustomException(info);
                }
                else if (statusCode.Equals("PreconditionFailed")) //jwt过期
                {
                    if (DoRelogin())
                    {
                        return(GetStringWithInfo(app, url, out ce, parmList)); //产生新的jwt,方法重新执行
                    }
                    else
                    {
                        ce = new CustomException(statusCode, "at " + urlcomp, "");
                    }
                }
                else //其它错误
                {
                    ce = new CustomException(statusCode, "at " + urlcomp, "");
                }
            }
            catch (Exception e)
            {
                ce = new CustomException("服务异常", e.Message + " [" + urlcomp + "]", e.StackTrace);
                RemoveHeader();
                return(String.Empty);
            }
            RemoveHeader();
            return(result);
        }
Beispiel #2
0
        /// <summary>
        /// POST方法(解压缩方法),json传入RequestBody
        /// </summary>
        /// <param name="url"></param>
        /// <param name="json"></param>
        /// <returns></returns>
        public static String HttpPostGZipWithInfo(String app, String url, out CustomException ce, String json)
        {
            String result  = String.Empty;
            var    content = new StringContent(json);
            var    handler = new HttpClientHandler()
            {
                AutomaticDecompression = DecompressionMethods.GZip
            };

            String urlcomp = GetUrl(app, url);

            //创建HttpClient(注意传入HttpClientHandler)
            using (var http = new HttpClient(handler))
            {
                SetHeader();
                var response = http.PostAsync(urlcomp, content).Result; //await异步等待回应
                //await异步读取最后的JSON(注意此时gzip已经被自动解压缩了,因为上面的AutomaticDecompression = DecompressionMethods.GZip)
                String statusCode = response.StatusCode.ToString();
                result = response.Content.ReadAsStringAsync().Result;//result就是返回的结果。

                if (response.IsSuccessStatusCode)
                {
                    GetToken(response);
                    ce = null;
                }
                else if (statusCode.Equals("Conflict")) //业务错误
                {
                    CustomExceptionInfo info = JsonConvert.DeserializeObject <CustomExceptionInfo>(result);
                    ce = new CustomException(info);
                }
                else if (statusCode.Equals("PreconditionFailed")) //jwt过期
                {
                    if (DoRelogin())
                    {
                        return(HttpPostGZipWithInfo(app, url, out ce, json)); //产生新的jwt,方法重新执行
                    }
                    else
                    {
                        ce = new CustomException(statusCode, "at " + urlcomp, "");
                    }
                }
                else //其它错误
                {
                    ce = new CustomException(statusCode, "at " + urlcomp, "");
                }
                RemoveHeader();
            }
            return(result);
        }
Beispiel #3
0
        /// <summary>
        /// POST方法,json传入RequestBody
        /// </summary>
        /// <param name="url"></param>
        /// <param name="json"></param>
        /// <returns></returns>
        public static String HttpPostWithInfo(String app, String url, out CustomException ce, String json)
        {
            String result  = String.Empty;
            String urlcomp = GetUrl(app, url);
            var    content = new StringContent(json, Encoding.UTF8, "application/json"); //Content-Type设置

            try
            {
                SetHeader();
                HttpResponseMessage response = _HttpClient.PostAsync(urlcomp, content).Result;
                String statusCode            = response.StatusCode.ToString();
                result = response.Content.ReadAsStringAsync().Result;
                if (response.IsSuccessStatusCode)
                {
                    GetToken(response);
                    ce = null;
                }
                else if (statusCode.Equals("Conflict")) //业务错误
                {
                    CustomExceptionInfo info = JsonConvert.DeserializeObject <CustomExceptionInfo>(result);
                    ce = new CustomException(info);
                }
                else if (statusCode.Equals("PreconditionFailed")) //jwt过期
                {
                    if (DoRelogin())
                    {
                        return(HttpPostWithInfo(app, url, out ce, json)); //产生新的jwt,方法重新执行
                    }
                    else
                    {
                        ce = new CustomException(statusCode, "at " + urlcomp, "");
                    }
                }
                else //其它错误
                {
                    ce = new CustomException(statusCode, "at " + urlcomp, "");
                }
            }
            catch (Exception e)
            {
                ce = new CustomException("服务异常", e.Message + " [" + urlcomp + "]", e.StackTrace);
                RemoveHeader();
                return(String.Empty);
            }
            RemoveHeader();
            return(result);
        }
 public CustomException(CustomExceptionInfo ei)
 {
     this.Info         = ei.Info;
     this.InnerMessage = ei.InnerMessage;
     this.Stacktrace   = ei.Stacktrace;
 }