public T Execute <T>(QimenRequest <T> request, string session) where T : QimenResponse { return(DoExecute(request, session)); }
private T DoExecute <T>(QimenRequest <T> request, string session) where T : QimenResponse { long start = DateTime.Now.Ticks; // 添加协议级请求参数 TopDictionary parameters = new TopDictionary(); if (request.GetQueryParameters() != null) { parameters.AddAll(request.GetQueryParameters()); } parameters.Add(Constants.METHOD, request.GetApiName()); parameters.Add(Constants.VERSION, request.Version); parameters.Add(Constants.APP_KEY, appKey); parameters.Add(Constants.TIMESTAMP, request.Timestamp); parameters.Add(Constants.FORMAT, format); parameters.Add(Constants.SIGN_METHOD, signMethod); parameters.Add(Constants.SESSION, session); parameters.Add(Constants.PARTNER_ID, Constants.SDK_VERSION); parameters.Add(Constants.QM_CUSTOMER_ID, request.CustomerId); // 添加头部参数 if (this.useGzipEncoding) { request.AddHeaderParameter(Constants.ACCEPT_ENCODING, Constants.CONTENT_ENCODING_GZIP); } try { string reqBody = request.Body; if (string.IsNullOrEmpty(reqBody)) { XmlWriter writer = new XmlWriter(Constants.QM_ROOT_TAG_REQ, typeof(QimenRequest <T>)); reqBody = writer.Write(request); } // 添加签名参数 parameters.Add(Constants.SIGN, TopUtils.SignTopRequest(parameters, reqBody, appSecret, signMethod)); string fullUrl = WebUtils.BuildRequestUrl(serverUrl, parameters); string rspBody = webUtils.DoPost(fullUrl, Encoding.UTF8.GetBytes(reqBody), Constants.QM_CONTENT_TYPE, request.GetHeaderParameters()); // 解释响应结果 T rsp = null; if (disableParser) { rsp = Activator.CreateInstance <T>(); rsp.Body = rspBody; } else { if (Constants.FORMAT_XML.Equals(format)) { ITopParser <T> tp = new QimenXmlParser <T>(); rsp = tp.Parse(rspBody); } } // 追踪错误的请求 if (rsp != null && rsp.IsError) { TimeSpan latency = new TimeSpan(DateTime.Now.Ticks - start); TraceApiError(appKey, request.GetApiName(), serverUrl, parameters, latency.TotalMilliseconds, rspBody); } return(rsp); } catch (Exception e) { TimeSpan latency = new TimeSpan(DateTime.Now.Ticks - start); TraceApiError(appKey, request.GetApiName(), serverUrl, parameters, latency.TotalMilliseconds, e.GetType() + ": " + e.Message); throw e; } }
public T Execute <T>(QimenRequest <T> request) where T : QimenResponse { return(Execute(request, null)); }