/// <summary> /// /// </summary> /// <param name="ApiHost"></param> /// <param name="ApiPath"></param> /// <param name="Content"></param> /// <param name="kvs"></param> /// <returns></returns> public String PublicPost(String ApiHost, String ApiPath, byte[] Content, params KeyValuePair <String, String>[] kvs) { if (string.IsNullOrEmpty(this.KeyId)) { return("阿里云AccessKeyId未设置"); } else if (string.IsNullOrEmpty(this.KeySecret)) { return("阿里云AliyunKeySecret未设置"); } else { var ctx = new Context(); ctx.KeyId = KeyId; ctx.KeySecret = KeySecret; ctx.RequestHost = ApiHost; ctx.RequestPath = ApiPath; ctx.Retry = int.MaxValue; ctx.Method = System.Net.Http.HttpMethod.Post; ctx.Parameters = new Dictionary <String, String>(); if (kvs != null) { foreach (var kv in kvs) { ctx.Parameters.Add(kv.Key, kv.Value); } } ctx.Parameters.TryAdd("Format", "JSON"); ctx.Parameters.TryAdd("AccessKeyId", ctx.KeyId); ctx.Parameters.TryAdd("Timestamp", DateTools.FormatUtc("yyyy-MM-dd'T'HH:mm:ss'Z'")); ctx.Parameters.TryAdd("SignatureMethod", "HMAC-SHA1"); ctx.Parameters.TryAdd("SignatureVersion", "1.0"); ctx.Parameters.TryAdd("SignatureNonce", Guid.NewGuid().ToString()); ComputeSignature(ctx); #region 生成提交数据 var sb = new System.Text.StringBuilder(); foreach (var kv in ctx.Parameters) { if (!string.IsNullOrEmpty(kv.Value)) { if (sb.Length > 0) { sb.Append("&"); } sb.Append(kv.Key + "=" + strUtil.UrlEncode(kv.Value)); } } if (ctx.RequestPath.IndexOf('?') > 0) { ctx.RequestPath += "&" + sb.ToString(); } else { ctx.RequestPath += "?" + sb.ToString(); } ctx.HttpRequestBody = Content; #endregion try { handler.HandleBefore(ctx); handler.HandleAfter(ctx); } catch { } return(ctx.HttpResponseString); } }