Example #1
0
        /// <summary>
        /// Post请求Json数据
        /// </summary>
        /// <typeparam name="U">请求POCO类型</typeparam>
        /// <typeparam name="V">响应POCO类型</typeparam>
        /// <param name="relatedUrl">相对url,可含参数</param>
        /// <param name="reqObj">请求POCO实例</param>
        /// <param name="paraInForm">请求参数是否为form形式,否则合并至Url</param>
        /// <returns>响应POCO实例</returns>
        public async Task <V> PostJson <U, V>(string relatedUrl, U reqObj, ParaMode paraMode = ParaMode.UrlPara)
        {
            this.Headers.Accept.TryParseAdd("application/json");
            var         paras = ObjToStrParas(reqObj);
            HttpContent content;

            switch (paraMode)
            {
            case ParaMode.UrlPara:
                var paraStr = relatedUrl.Contains('?') ? "&" : "?" +
                              string.Join("&", paras.Select(para => para.Key + "=" + WebUtility.UrlEncode(para.Value)));
                relatedUrl += paraStr;
                content     = new FormUrlEncodedContent(new List <KeyValuePair <string, string> >());
                break;

            case ParaMode.FormPara:
                content = new FormUrlEncodedContent(paras);
                break;

            default:
                content = new StringContent(JsonConvert.SerializeObject(reqObj));
                break;
            }
            try
            {
                var response = await client.PostAsync(relatedUrl, content).ConfigureAwait(false);

                return(JsonConvert.DeserializeObject <V>(response.Content.ReadAsStringAsync().Result));
            }
            catch
            {
                openFlag[0] = false;
                throw;
            }
        }
Example #2
0
        /// <summary>
        /// Post请求Json数据
        /// </summary>
        /// <param name="relatedUrl">相对url</param>
        /// <param name="paraMode">参数模式</param>
        /// <param name="paras">参数</param>
        /// <returns>响应字符串</returns>
        public async Task <string> PostJson(string relatedUrl, ParaMode paraMode, params object[] paras)
        {
            this.Headers.Accept.TryParseAdd("application/json");
            var paraDic = new Dictionary <string, string>();

            foreach (var para in paras)
            {
                var paraPairs = ObjToStrParas(para);
                foreach (var paraPair in paraPairs)
                {
                    if (!paraDic.ContainsKey(paraPair.Key))
                    {
                        paraDic.Add(paraPair.Key, paraPair.Value);
                    }
                }
            }
            HttpContent content;

            switch (paraMode)
            {
            case ParaMode.UrlPara:
                var paraStr = relatedUrl.Contains('?') ? "&" : "?" +
                              string.Join("&", paraDic.Select(para => para.Key + "=" + WebUtility.UrlEncode(para.Value)));
                relatedUrl += paraStr;
                content     = new FormUrlEncodedContent(new List <KeyValuePair <string, string> >());
                break;

            case ParaMode.FormPara:
                content = new FormUrlEncodedContent(paraDic);
                break;

            default:
                content = new StringContent(JsonConvert.SerializeObject(paraDic), Encoding.UTF8, "application/json");
                break;
            }

            try
            {
                var response = await client.PostAsync(relatedUrl, content).ConfigureAwait(false);

                var data = response.Content.ReadAsStringAsync().Result;
                if (response.StatusCode != HttpStatusCode.OK)
                {
                    Console.WriteLine(response.StatusCode);
                    Console.WriteLine(data);
                    return(null);
                }
                return(data);
            }
            catch
            {
                openFlag[0] = false;
                throw;
            }
        }