Esempio n. 1
0
        /// <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);
            }
        }