.net对接阿里云CSB服务

news/2025/3/21 2:57:13/
public Response<string> Main(MonthPlanRequest request){string apiName = "MonthPlan", postData =   request.ToJson(); var result = ConnectCSB(apiName, postData);return InvokeResult.Fail<string>("访问成功");}
	/// <summary>/// 请求方式post,参数为json格式/// </summary>/// <param name="apiName">api名称</param>/// <param name="postData">发送的参数</param>/// <returns></returns>public static string ConnectCSB(string apiName, string postData){var resultStr = "";try{string ACCESS_KEY = System.Configuration.ConfigurationManager.AppSettings["ACCESS_KEY"].ToString();string SECRET_KEY = System.Configuration.ConfigurationManager.AppSettings["SECRET_KEY"].ToString();string CSBURL = System.Configuration.ConfigurationManager.AppSettings["CSBURL"].ToString();//签名时间戳long timeStamp = ToUnixTimeMilliseconds(DateTime.Now);//form表单提交的签名串生成示例string signature = sign(apiName, "1.0.0", timeStamp, ACCESS_KEY, SECRET_KEY, null, postData);Dictionary<string, string> headerDic = new Dictionary<string, string>();headerDic.Add("_api_access_key", ACCESS_KEY);//访问密钥headerDic.Add("_api_timestamp", timeStamp.ToString());//签名时间戳headerDic.Add("_api_name", apiName);  //需要调用的api名称headerDic.Add("_api_signature", signature);//签名headerDic.Add("_api_version", "1.0.0");//版本																	resultStr = GetResult(CSBURL, "application/json", "application/json;charset=utf-8", "POST", postData, headerDic);}catch (Exception e){ErpErrLog(e.Message, apiName);return "[{'IsSuccess': 'false','Msg':'" + e.Message + "'}]";}return resultStr;}
	public static long ToUnixTimeMilliseconds(DateTime nowTime){DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1, 0, 0, 0, 0));// DateTime nowTime = DateTime.Now;long unixTime = (long)Math.Round((nowTime - startTime).TotalMilliseconds, MidpointRounding.AwayFromZero);return unixTime;}
/// <summary>/// 本方法生成http请求的csb签名值。/// 调用csb服务时,需要在httpheader中增加以下几个头信息:/// _api_name: csb服务名/// _api_version: csb服务版本号/// _api_access_key: csb上的凭证ak/// _api_timestamp: 时间戳/// _api_signature: 本方法返回的签名串/// </summary>/// <param name="apiName">csb服务名</param>/// <param name="apiVersion">csb服务版本号</param>/// <param name="timeStamp">时间戳</param>/// <param name="accessKey">csb上的凭证ak</param>/// <param name="secretKey">csb上凭证的sk</param>/// <param name="formParamDict">form表单提交的参数列表(各参数值是还未urlEncoding编码的原始业务参数值)。如果是form提交,请使用 Content-Type= application/x-www-form-urlencoded </param>/// <param name="body">非form表单方式提交的请求内容,目前没有参与签名计算</param>/// <returns>签名串。</returns>public static string sign(string apiName, string apiVersion, long timeStamp, string accessKey, string secretKey, Dictionary<string, object[]> formParamDict, object body){Dictionary<string, object[]> newDict = new Dictionary<string, object[]>();if (formParamDict != null){foreach (KeyValuePair<string, object[]> pair in formParamDict){newDict.Add(pair.Key, pair.Value.Select(v => { return HttpUtility.UrlEncode(v.ToString()); }).ToArray());}}//设置csb要求的头参数newDict.Add("_api_name", new String[] { apiName });newDict.Add("_api_version", new String[] { apiVersion });newDict.Add("_api_access_key", new String[] { accessKey });newDict.Add("_api_timestamp", new object[] { timeStamp });//对所有参数进行排序var sortedDict = getSortByASCII(newDict);StringBuilder builder = new StringBuilder();foreach (KeyValuePair<string, object[]> pair in sortedDict){foreach (object obj in pair.Value){builder.Append(string.Format("{0}={1}&", pair.Key, obj));}}string str = builder.ToString();if (str.EndsWith("&")){str = str.Substring(0, str.Length - 1); //去掉最后一个多余的 & 符号}System.Security.Cryptography.HMACSHA1 hmacsha = new System.Security.Cryptography.HMACSHA1{Key = Encoding.UTF8.GetBytes(secretKey)};byte[] bytes = Encoding.UTF8.GetBytes(str);return Convert.ToBase64String(hmacsha.ComputeHash(bytes));}
public static string GetResult(string url, string accept, string contentType, string requestType, string parms, Dictionary<string, string> headerDic = null){var result = string.Empty;try{Stopwatch stopWatch = new Stopwatch();stopWatch.Start();var myRequest = (HttpWebRequest)WebRequest.Create(url);myRequest.Timeout = 300000;//100秒超时时间较短,需要调整成为300秒if (!string.IsNullOrEmpty(accept)){myRequest.Accept = accept;}if (!string.IsNullOrEmpty(contentType)){myRequest.ContentType = contentType;}//   myRequest.Headers.Add(new HttpRequestHeader(),"123");myRequest.Method = requestType;if (myRequest.Method == "POST"){var reqStream = myRequest.GetRequestStream();var encoding = Encoding.GetEncoding("utf-8");var inData = encoding.GetBytes(parms);reqStream.Write(inData, 0, inData.Length);reqStream.Close();}if (headerDic != null){foreach (var h in headerDic){myRequest.Headers.Add(h.Key, h.Value);}}//发送post请求到服务器并读取服务器返回信息    var res = (HttpWebResponse)myRequest.GetResponse();if (res.StatusCode != HttpStatusCode.OK) return result;var receiveStream = res.GetResponseStream();var encode = Encoding.GetEncoding("utf-8");if (receiveStream != null){var readStream = new StreamReader(receiveStream, encode);var oResponseMessage = readStream.ReadToEnd();res.Close();readStream.Close();result = oResponseMessage;ErpResult re = JsonConvert.DeserializeObject(result, typeof(ErpResult)) as ErpResult;if (re.code.Equals("000000")){ return "[{'IsSuccess': 'true','Msg':'" + re.message + "'}]";}elsereturn "[{'IsSuccess': 'false','Msg':'" + re.message + "'}]";}stopWatch.Stop();}catch (Exception e){ErpErrLog(e.Message, headerDic["_api_name"].ToString());if (e is WebException && ((WebException)e).Status == WebExceptionStatus.ProtocolError){WebResponse errResp = ((WebException)e).Response;using (Stream respStream = errResp.GetResponseStream()){var readStream = new StreamReader(respStream, Encoding.GetEncoding("utf-8"));var strError = readStream.ReadToEnd();Console.Out.WriteLine(strError);// read the error response}}return "[{'IsSuccess': 'false','Msg':'"+e.Message+"'}]";}return "[{'IsSuccess': 'true','Msg':'" + result + "'}]";}
public static Dictionary<string, object[]> getSortByASCII(Dictionary<string, object[]> dict){var sortList = dict.ToList();//经过测试以下三种是正确的,会按照ASCII码排序sortList.Sort((x, y) =>{return string.CompareOrdinal(x.Key, y.Key);});sortList.Sort((x, y) =>{var r = string.Compare(x.Key, y.Key, StringComparison.Ordinal);return r;});Dictionary<string, object[]> sortDict = new Dictionary<string, object[]>();var keys = dict.Keys.ToArray();Array.Sort(keys, string.CompareOrdinal); //anforeach (var key in keys){sortDict.Add(key, dict[key]);}return sortDict;}

http://www.ppmy.cn/news/1234189.html

相关文章

Java判断字符串当中是否包含中文内容

代码如下&#xff1a; public static void main(String[] args_) throws Exception {String str1 "zhang张123";String str2 "zhang123";System.out.println(checkStringType(str1)); // 包含中文字符System.out.println(checkStringType(str2)); // 不包…

【Linux学习笔记】基础IO

这里写目录标题 1. 系统文件I/O1.1. 接口介绍1.2. 库函数接口与系统接口的关系 2. 文件描述符fd2.1. 0&1&2文件描述符2.2. 文件描述符的分配规则2.3. 重定向2.4. 重定向系统调用2.5. 进程独立性 3. Linux下一切皆文件4. 缓冲区4.1. 缓冲区的理解4.2. 缓冲区的位置 5. 理…

Elasticsearch 应用

Elasticsearch 的应用 本文使用的版本为&#xff1a;7.14.0 todo:前端部分 Kibana的开发工具 IK分词器粗粒度 # 请求,通过【ik_smart】最粗粒度划分 GET _analyze {"analyzer": "ik_smart","text":"中国共产党" }# 返回 {"to…

MAX/MSP SDK学习04:Messages selector的使用

其实消息选择器在simplemax示例中就接触到了&#xff0c;但这文档非要讲那么抽象。目前为止对消息选择器的理解是&#xff1a;可判断接收过来的消息是否符合本Object的处理要求&#xff0c;比如加法对象只可接收数值型的消息以处理&#xff0c;但不能接收t_symbol型的消息&…

swift-基础

print区别 print(1,2,3, separator: "-", terminator: "\n")//表示用-来分割//1-2-3 //terminator表示用\n作为终止符 var a "a",b "b" print(a b) //ab print("\(a)前面是a变量\(b)后面是b变量")变量 var name "…

OFI libfabric原理及应用解析

Agenda 目录/议题 编译通信软件硬件和软件带来的挑战为什么需要libfabriclibfabric架构API分组socket应用 VS libfabric应用区别GPU数据传输示例 编译通信软件 可靠面向连接的TCP和无连接的数据报UDP协议高性能计算HPC或人工智能AI 软硬件复杂性带来的挑战 上千个节点的集群, …

6.基于蜻蜓优化算法 (DA)优化的VMD参数(DA-VMD)

代码原理 基于蜻蜓优化算法 (Dragonfly Algorithm, DA) 优化的 VMD 参数&#xff08;DA-VMD&#xff09;是指使用蜻蜓优化算法对 VMD 方法中的参数进行自动调优和优化。 VMD&#xff08;Variational Mode Decomposition&#xff09;是一种信号分解方法&#xff0c;用于将复杂…

华为云cce健康检查有什么用?配置需要注意什么?

华为云cce健康检查 如上图&#xff0c;华为云健康检查可用来探测cce的实例运行状态&#xff0c;必要时cce会自动重启实例&#xff0c;达到cce持续服务。 但是配置时需要注意一下几个方面&#xff0c;否则cce的状态总是有些不正常。 1、http探查比较友好。因为我们的在cce里面…