public T Execute <T>(ITopRequest <T> request, string session) where T : TopResponse { // 添加协议级请求参数 TopDictionary txtParams = new TopDictionary(request.GetParameters()); txtParams.Add(METHOD, request.GetApiName()); txtParams.Add(VERSION, "2.0"); txtParams.Add(APP_KEY, appKey); txtParams.Add(FORMAT, format); txtParams.Add(PARTNER_ID, "top-sdk-net-20110512"); txtParams.Add(TIMESTAMP, DateTime.Now); txtParams.Add(SESSION, session); // 添加签名参数 txtParams.Add(SIGN, TopUtils.SignTopRequest(txtParams, appSecret)); // 是否需要上传文件 string body; if (request is ITopUploadRequest <T> ) { ITopUploadRequest <T> uRequest = (ITopUploadRequest <T>)request; IDictionary <string, FileItem> fileParams = TopUtils.CleanupDictionary(uRequest.GetFileParameters()); body = webUtils.DoPost(this.serverUrl, txtParams, fileParams); } else { body = webUtils.DoPost(this.serverUrl, txtParams); } T rsp; if (FORMAT_XML.Equals(format)) { ITopParser <T> tp = new TopXmlParser <T>(); rsp = tp.Parse(body); } else { ITopParser <T> tp = new TopJsonParser <T>(); rsp = tp.Parse(body); } return(rsp); }
private T DoExecute <T>(ITopRequest <T> request, string session, DateTime timestamp) where T : TopResponse { long start = DateTime.Now.Ticks; // 提前检查业务参数 try { request.Validate(); } catch (TopException e) { return(CreateErrorResponse <T>(e.ErrorCode, e.ErrorMsg)); } // 添加协议级请求参数 TopDictionary txtParams = new TopDictionary(request.GetParameters()); txtParams.Add(Constants.METHOD, request.GetApiName()); txtParams.Add(Constants.VERSION, "2.0"); txtParams.Add(Constants.SIGN_METHOD, Constants.SIGN_METHOD_HMAC); txtParams.Add(Constants.APP_KEY, appKey); txtParams.Add(Constants.FORMAT, format); txtParams.Add(Constants.PARTNER_ID, GetSdkVersion()); txtParams.Add(Constants.TIMESTAMP, timestamp); txtParams.Add(Constants.TARGET_APP_KEY, request.GetTargetAppKey()); txtParams.Add(Constants.SESSION, session); txtParams.AddAll(this.systemParameters); if (this.useSimplifyJson) { txtParams.Add(Constants.SIMPLIFY, "true"); } // 添加签名参数 txtParams.Add(Constants.SIGN, TopUtils.SignTopRequest(txtParams, appSecret, Constants.SIGN_METHOD_HMAC)); // 添加头部参数 if (this.useGzipEncoding) { request.GetHeaderParameters()[Constants.ACCEPT_ENCODING] = Constants.CONTENT_ENCODING_GZIP; } string realServerUrl = GetServerUrl(this.serverUrl, request.GetApiName(), session); string reqUrl = WebUtils.BuildRequestUrl(realServerUrl, txtParams); try { string body; if (request is ITopUploadRequest <T> ) // 是否需要上传文件 { ITopUploadRequest <T> uRequest = (ITopUploadRequest <T>)request; IDictionary <string, FileItem> fileParams = TopUtils.CleanupDictionary(uRequest.GetFileParameters()); body = webUtils.DoPost(realServerUrl, txtParams, fileParams, request.GetHeaderParameters()); } else { body = webUtils.DoPost(realServerUrl, txtParams, request.GetHeaderParameters()); } // 解释响应结果 T rsp; if (disableParser) { rsp = Activator.CreateInstance <T>(); rsp.Body = body; } else { if (Constants.FORMAT_XML.Equals(format)) { ITopParser <T> tp = new TopXmlParser <T>(); rsp = tp.Parse(body); } else { ITopParser <T> tp; if (useSimplifyJson) { tp = new TopSimplifyJsonParser <T>(); } else { tp = new TopJsonParser <T>(); } rsp = tp.Parse(body); } } // 追踪错误的请求 if (rsp.IsError) { TimeSpan latency = new TimeSpan(DateTime.Now.Ticks - start); TraceApiError(appKey, request.GetApiName(), serverUrl, txtParams, latency.TotalMilliseconds, rsp.Body); } return(rsp); } catch (Exception e) { TimeSpan latency = new TimeSpan(DateTime.Now.Ticks - start); TraceApiError(appKey, request.GetApiName(), serverUrl, txtParams, latency.TotalMilliseconds, e.GetType() + ": " + e.Message); throw e; } }
private T DoExecute <T>(ITopRequest <T> request, string session, DateTime timestamp) where T : TopResponse { // 提前检查业务参数 try { request.Validate(); } catch (TopException e) { return(CreateErrorResponse <T>(e.ErrorCode, e.ErrorMsg)); } // 添加协议级请求参数 TopDictionary txtParams = new TopDictionary(request.GetParameters()); txtParams.Add(METHOD, request.GetApiName()); txtParams.Add(VERSION, "2.0"); txtParams.Add(SIGN_METHOD, Constants.SIGN_METHOD_MD5); txtParams.Add(APP_KEY, appKey); txtParams.Add(FORMAT, format); txtParams.Add(PARTNER_ID, GetSdkVersion()); txtParams.Add(TIMESTAMP, timestamp); txtParams.Add(TARGET_APP_KEY, request.GetTargetAppKey()); txtParams.Add(SESSION, session); txtParams.AddAll(this.systemParameters); if (this.useSimplifyJson) { txtParams.Add(SIMPLIFY, "true"); } // 添加签名参数 txtParams.Add(SIGN, TopUtils.SignTopRequest(txtParams, appSecret, true)); // 添加头部参数 if (this.useGzipEncoding) { request.GetHeaderParameters()[Constants.ACCEPT_ENCODING] = Constants.CONTENT_ENCODING_GZIP; } string realServerUrl = GetServerUrl(this.serverUrl, request.GetApiName(), session); string reqUrl = webUtils.BuildGetUrl(realServerUrl, txtParams); try { string body; if (request is ITopUploadRequest <T> ) // 是否需要上传文件 { ITopUploadRequest <T> uRequest = (ITopUploadRequest <T>)request; IDictionary <string, FileItem> fileParams = TopUtils.CleanupDictionary(uRequest.GetFileParameters()); body = webUtils.DoPost(realServerUrl, txtParams, fileParams, request.GetHeaderParameters()); } else { body = webUtils.DoPost(realServerUrl, txtParams, request.GetHeaderParameters()); } // 解释响应结果 T rsp; if (disableParser) { rsp = Activator.CreateInstance <T>(); rsp.Body = body; } else { if (FORMAT_XML.Equals(format)) { ITopParser tp = new TopXmlParser(); rsp = tp.Parse <T>(body); } else { ITopParser tp; if (useSimplifyJson) { tp = new TopJsonSimplifyParser(); } else { tp = new TopJsonParser(); } rsp = tp.Parse <T>(body); } } // 追踪错误的请求 if (!disableTrace && rsp.IsError) { StringBuilder sb = new StringBuilder(reqUrl).Append(" response error!\r\n").Append(rsp.Body); topLogger.Warn(sb.ToString()); } return(rsp); } catch (Exception e) { if (!disableTrace) { StringBuilder sb = new StringBuilder(reqUrl).Append(" request error!\r\n").Append(e.StackTrace); topLogger.Error(sb.ToString()); } throw e; } }
private T DoExecuteOApi <T>(IDingTalkRequest <T> request, string session, string accessKey, string accessSecret, string suiteTicket, string corpId, DateTime timestamp) where T : DingTalkResponse { long start = DateTime.Now.Ticks; // 提前检查业务参数 try { request.Validate(); } catch (TopException e) { return(CreateErrorResponse <T>(e.ErrorCode, e.ErrorMsg)); } this.format = Constants.FORMAT_JSON; // 添加协议级请求参数 TopDictionary txtParams = new TopDictionary(request.GetParameters()); txtParams.Add(DingTalkConstants.ACCESS_TOKEN, session); // 添加头部参数 if (this.useGzipEncoding) { request.GetHeaderParameters()[Constants.ACCEPT_ENCODING] = Constants.CONTENT_ENCODING_GZIP; } string realServerUrl = null; // 签名优先 if (accessKey != null) { long dingTimestamp = GetTimestamp(DateTime.UtcNow); // 验证签名有效性 String canonicalString = DingTalkSignatureUtil.GetCanonicalStringForIsv(dingTimestamp, suiteTicket); String signature = DingTalkSignatureUtil.ComputeSignature(accessSecret, canonicalString); IDictionary <String, String> ps = new Dictionary <String, String>(); ps.Add("accessKey", accessKey); ps.Add("signature", signature); ps.Add("timestamp", dingTimestamp + ""); if (suiteTicket != null) { ps.Add("suiteTicket", suiteTicket); } if (corpId != null) { ps.Add("corpId", corpId); } String queryStr = DingTalkSignatureUtil.ParamToQueryString(ps, "utf-8"); if (this.serverUrl.IndexOf("?") > 0) { realServerUrl = this.serverUrl + "&" + queryStr; } else { realServerUrl = this.serverUrl + "?" + queryStr; } } else { if (this.serverUrl.IndexOf("?") > 0) { realServerUrl = this.serverUrl + (session != null && session != "" ? ("&access_token=" + session) : ""); } else { realServerUrl = this.serverUrl + (session != null && session != "" ? ("?access_token=" + session) : ""); } } try { string body; if (request.GetHttpMethod() == "POST") { if (request is IDingTalkUploadRequest <T> ) // 是否需要上传文件 { IDingTalkUploadRequest <T> uRequest = (IDingTalkUploadRequest <T>)request; IDictionary <string, FileItem> fileParams = TopUtils.CleanupDictionary(uRequest.GetFileParameters()); body = webUtils.DoPost(realServerUrl, null, fileParams, request.GetHeaderParameters()); } else { IDictionary <String, Object> jsonParams = new Dictionary <String, Object>(); foreach (string key in request.GetParameters().Keys) { string value = request.GetParameters()[key]; if (value.StartsWith("[") && value.EndsWith("]")) { IList childMap = (IList)TopUtils.JsonToObject(value); jsonParams.Add(key, childMap); } else if (value.StartsWith("{") && value.EndsWith("}")) { IDictionary <string, Object> childMap = (IDictionary <string, Object>)TopUtils.JsonToObject(value); jsonParams.Add(key, childMap); } else { jsonParams.Add(key, value); } } body = webUtils.DoPostWithJson(realServerUrl, jsonParams, request.GetHeaderParameters()); } } else { body = webUtils.DoGet(realServerUrl, request.GetParameters()); } // 解释响应结果 T rsp; if (disableParser) { rsp = Activator.CreateInstance <T>(); rsp.Body = body; } else { ITopParser <T> tp = new DingTalkJsonParser <T>(); rsp = tp.Parse(body); } // 追踪错误的请求 if (rsp.IsError) { TimeSpan latency = new TimeSpan(DateTime.Now.Ticks - start); TraceApiError(request.GetApiName(), serverUrl, txtParams, latency.TotalMilliseconds, rsp.Body); } return(rsp); } catch (Exception e) { TimeSpan latency = new TimeSpan(DateTime.Now.Ticks - start); TraceApiError(request.GetApiName(), serverUrl, txtParams, latency.TotalMilliseconds, e.GetType() + ": " + e.Message); throw e; } }
private T DoExecute <T>(IAliyunRequest <T> request, string session, DateTime timestamp) where T : AliyunResponse { // 提前检查业务参数 try { request.Validate(); } catch (TopException e) { return(CreateErrorResponse <T>(e.ErrorCode, e.ErrorMsg)); } // 添加协议级请求参数 TopDictionary txtParams = new TopDictionary(request.GetParameters()); txtParams.AddAll(this.systemParameters); AddCommonParams(request, txtParams); string reqUrl = webUtils.BuildGetUrl(this.serverUrl, txtParams); try { string body; if (request is IAliyunUploadRequest <T> ) // 是否需要上传文件 { IAliyunUploadRequest <T> uRequest = (IAliyunUploadRequest <T>)request; IDictionary <string, FileItem> fileParams = TopUtils.CleanupDictionary(uRequest.GetFileParameters()); body = webUtils.DoPost(this.serverUrl.TrimEnd('/'), txtParams, fileParams); } else { body = webUtils.DoPost(this.serverUrl.TrimEnd('/'), txtParams); } // 解释响应结果 T rsp; if (disableParser) { rsp = Activator.CreateInstance <T>(); rsp.Body = body; } else { if (FORMAT_XML.Equals(format)) { IAliyunParser tp = new AliyunXmlParser(); rsp = tp.Parse <T>(body); } else { IAliyunParser tp = new AliyunJsonParser(); rsp = tp.Parse <T>(body); } } // 追踪错误的请求 if (!disableTrace && rsp.IsError) { StringBuilder sb = new StringBuilder(reqUrl).Append(" response error!\r\n").Append(rsp.Body); topLogger.Warn(sb.ToString()); } return(rsp); } catch (Exception e) { if (!disableTrace) { StringBuilder sb = new StringBuilder(reqUrl).Append(" request error!\r\n").Append(e.StackTrace); topLogger.Error(sb.ToString()); } throw e; } }
private T DoExecute <T>(ITopRequest <T> request, string session, long timestamp) where T : YunResponse { // 提前检查业务参数 try { request.Validate(); } catch (YunException e) { return(CreateErrorResponse <T>(e.ErrorCode, e.ErrorMsg)); } // 添加协议级请求参数 var txtParams = new YunDictionary(request.GetParameters()) { { METHOD, request.GetApiName() }, { VERSION, "1.0" }, { APP_KEY, appKey }, { FORMAT, format }, { TIMESTAMP, timestamp }, { SESSION, session } }; txtParams.AddAll(this.systemParameters); // 添加签名参数 txtParams.Add(SIGN, TopUtils.SignTopRequest(txtParams, appSecret, "UTF-8")); var reqUrl = webUtils.BuildGetUrl(this.serverUrl, txtParams); try { string body; if (request is ITopUploadRequest <T> ) // 是否需要上传文件 { var uRequest = (ITopUploadRequest <T>)request; var fileParams = TopUtils.CleanupDictionary(uRequest.GetFileParameters()); body = webUtils.DoPost(this.serverUrl, txtParams, fileParams); } else { body = webUtils.DoPost(this.serverUrl, txtParams); } // 解释响应结果 T rsp; if (disableParser) { rsp = Activator.CreateInstance <T>(); rsp.Body = body; } else { if (FORMAT_XML.Equals(format)) { ITopParser tp = new TopXmlParser(); rsp = tp.Parse <T>(body); } else { ITopParser tp = new TopJsonParser(); rsp = tp.Parse <T>(body); //rsp = Newtonsoft.Json.JsonConvert.DeserializeObject<T>(body); //rsp = JsonDeserialize<T>(body); } } rsp.ReqUrl = reqUrl; // 追踪错误的请求 if (!disableTrace && rsp.IsError) { var sb = new StringBuilder(reqUrl).Append(" response error!\r\n").Append(rsp.Body); topLogger.Warn(sb.ToString()); } return(rsp); } catch (Exception e) { if (!disableTrace) { var sb = new StringBuilder(reqUrl).Append(" request error!\r\n").Append(e.StackTrace); topLogger.Error(sb.ToString()); } throw e; } }
private T DoExecute <T>(ITopRequest <T> request, string session, DateTime timestamp) where T : TopResponse { // 提前检查业务参数 try { request.Validate(); } catch (TopException e) { return(createErrorResponse <T>(e.ErrorCode, e.ErrorMsg)); } // 添加协议级请求参数 TopDictionary txtParams = new TopDictionary(request.GetParameters()); txtParams.Add(METHOD, request.GetApiName()); txtParams.Add(VERSION, "2.0"); txtParams.Add(APP_KEY, appKey); txtParams.Add(FORMAT, format); txtParams.Add(PARTNER_ID, "top-sdk-net-20130425"); txtParams.Add(TIMESTAMP, timestamp); txtParams.Add(SESSION, session); txtParams.AddAll(this.systemParameters); // 添加签名参数 txtParams.Add(SIGN, TopUtils.SignTopRequest(txtParams, appSecret)); // 是否需要上传文件 string body; if (request is ITopUploadRequest <T> ) { ITopUploadRequest <T> uRequest = (ITopUploadRequest <T>)request; IDictionary <string, FileItem> fileParams = TopUtils.CleanupDictionary(uRequest.GetFileParameters()); body = webUtils.DoPost(this.serverUrl, txtParams, fileParams); } else { body = webUtils.DoPost(this.serverUrl, txtParams); } // 解释响应结果 T rsp; if (disableParser) { rsp = Activator.CreateInstance <T>(); rsp.Body = body; } else { if (FORMAT_XML.Equals(format)) { ITopParser tp = new TopXmlParser(); rsp = tp.Parse <T>(body); } else { ITopParser tp = new TopJsonParser(); rsp = tp.Parse <T>(body); } } // 追踪错误的请求 if (!disableTrace) { rsp.ReqUrl = webUtils.BuildGetUrl(this.serverUrl, txtParams); if (rsp.IsError) { topLogger.Warn(rsp.ReqUrl + "\r\n" + rsp.Body); } } return(rsp); }
private T DoExecute <T>(ITopRequest <T> request, string session, DateTime timestamp) where T : TopResponse { // 提前检查业务参数 try { request.Validate(); } catch (TopException e) { return(createErrorResponse <T>(e.ErrorCode, e.ErrorMsg)); } string sip_timestamp = timestamp.ToString("yyyy-MM-dd HH:mm:ss.000"); // 添加协议级请求参数 TopDictionary txtParams = new TopDictionary(); PortalRestRequest portalRestRequest = request.GetParameters(); //Jayrock.Json.JsonTextWriter writer = new Jayrock.Json.JsonTextWriter(); //Jayrock.Json.Conversion.JsonConvert.Export(paramDict, writer); //txtParams.Add(PORTALTRANSACTION, "[" + Jayrock.Json.Conversion.JsonConvert.ExportToString(portalRestRequest) + "]"); txtParams.Add(PORTALTRANSACTION, "[" + Newtonsoft.Json.JsonConvert.SerializeObject(portalRestRequest) + "]"); txtParams.Add(APP_KEY, appKey); txtParams.Add(TIMESTAMP, sip_timestamp); txtParams.AddAll(this.systemParameters); // 添加签名参数 txtParams.Add(SIGN, TopUtils.SignBurgeonPortalRequest(appKey, appSecret, sip_timestamp)); // 是否需要上传文件 string body; if (request is ITopUploadRequest <T> ) { ITopUploadRequest <T> uRequest = (ITopUploadRequest <T>)request; IDictionary <string, FileItem> fileParams = TopUtils.CleanupDictionary(uRequest.GetFileParameters()); body = webUtils.DoPost(this.serverUrl, txtParams, fileParams); } else { body = webUtils.DoPost(this.serverUrl, txtParams); } // 解释响应结果 T rsp; if (disableParser) { rsp = Activator.CreateInstance <T>(); rsp.Body = body; } else { ITopParser tp = new TopJsonParser(); //去掉body[] body = body.Substring(1, body.LastIndexOf(']') - 1); rsp = tp.Parse <T>(body); } // 追踪错误的请求 if (!disableTrace) { rsp.Body = body; rsp.ReqUrl = webUtils.BuildGetUrl(this.serverUrl, txtParams); if (rsp.IsError) { topLogger.Warn(rsp.ReqUrl + "\r\n" + rsp.Body); } } return(rsp); }