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; } }
public T Execute <T>(IOneNETRequest <T> request, string session) where T : OneNETResponse { return(Execute(request, session, DateTime.Now)); }
public T Execute <T>(IOneNETRequest <T> request, string session, DateTime timestamp) where T : OneNETResponse { return(DoExecute(request, session, timestamp)); }
/// <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)); }