Esempio n. 1
0
        private T DoExecute <T>(IOneNETRequest <T> request, string session, DateTime timestamp) where T : OneNETResponse
        {
            // 提前检查业务参数
            try
            {
                request.Validate();
            }
            catch (OneNETException e)
            {
                return(CreateErrorResponse <T>(e.ErrorCode, e.ErrorMsg));
            }

            // 添加协议级请求参数
            var txtParams = new OneNETDictionary(request.GetParameters());

            txtParams.Add(VERSION, "2.0");
            txtParams.Add(FORMAT, format);
            txtParams.Add(TIMESTAMP, timestamp);
            txtParams.Add(SESSION, session);
            txtParams.AddAll(this.systemParameters);

            // 添加签名参数 (目前不需要)
            //txtParams.Add(SIGN, OneNETUtils.SignOneNETRequest(txtParams, appSecret));

            var paramStr = txtParams.Where(x => x.Value is string)
                           .ToDictionary(k => k.Key, v => v.Value.ToString());

            var requestUrl = request.GetURL(context);
            var reqUrl     = webUtils.BuildGetUrl(requestUrl, paramStr);

            try
            {
                var    httpHeader = API_KEY + ":" + appKey;
                string body;
                byte[] bytesBody = null;
                switch (request.RequestMethod())
                {
                case HttpRequestMethod.Get:
                {
                    if (request.IsRequestForByte())
                    {
                        body      = "";
                        bytesBody = webUtils.DoGetBytes(reqUrl, paramStr, httpHeader);
                    }
                    else
                    {
                        body = webUtils.DoGet(reqUrl, paramStr, httpHeader);
                    }
                    break;
                }

                case HttpRequestMethod.Post:
                    body = webUtils.DoPost(reqUrl, request.GetPostContent(), httpHeader); break;

                case HttpRequestMethod.Put:
                    body = webUtils.DoPut(reqUrl, request.GetPostContent(), httpHeader); break;

                case HttpRequestMethod.Delete:
                    body = webUtils.DoDelete(reqUrl, httpHeader); break;

                default: body = webUtils.DoGet(reqUrl, paramStr, httpHeader); break;
                }

                // 解释响应结果

                T rsp;
                if (disableParser)
                {
                    rsp      = Activator.CreateInstance <T>();
                    rsp.Body = body;
                }
                else
                {
                    if (FORMAT_XML.Equals(format))
                    {
                        var tp = new OneNETXmlParser();
                        rsp = tp.Parse <T>(body);
                    }
                    else
                    {
                        rsp = request.IsRequestForByte()
                            ? Activator.CreateInstance <T>()
                            : JsonConvert.DeserializeObject <T>(body);
                        if (bytesBody != null)
                        {
                            rsp.BinDataBody = bytesBody;
                        }
                        rsp.Body = body;
                    }
                }

                // 追踪错误的请求
                if (disableTrace || !rsp.IsError)
                {
                    return(rsp);
                }
                var sb = new StringBuilder(reqUrl).Append(" response error!\r\n").Append(rsp.Body);
                OneNETLogger.Warn(sb.ToString());
                return(rsp);
            }
            catch (Exception e)
            {
                if (disableTrace)
                {
                    throw;
                }
                var sb = new StringBuilder(reqUrl).Append(" request error!\r\n").Append(e.StackTrace);
                OneNETLogger.Error(sb.ToString());
                throw;
            }
        }
Esempio n. 2
0
 public T Execute <T>(IOneNETRequest <T> request, string session) where T : OneNETResponse
 {
     return(Execute(request, session, DateTime.Now));
 }
Esempio n. 3
0
 public T Execute <T>(IOneNETRequest <T> request, string session, DateTime timestamp) where T : OneNETResponse
 {
     return(DoExecute(request, session, timestamp));
 }
Esempio n. 4
0
 /// <summary>
 /// 执行请求
 /// </summary>
 /// <typeparam name="T">请求类型</typeparam>
 /// <param name="request">请求</param>
 /// <returns>请求的响应</returns>
 public T Execute <T>(IOneNETRequest <T> request) where T : OneNETResponse
 {
     return(Execute(request, null));
 }