Esempio n. 1
0
        /// <summary>
        /// post请求
        /// </summary>
        /// <typeparam name="TResponse">返回类型</typeparam>
        /// <param name="return">请求参数</param>
        /// <param name="headers">headers可做认证信息</param>
        /// <returns></returns>
        public static async Task <ResultBase <TResponse> > PostAsync <TResponse>(this IRPCContext context, IReturn <TResponse> @return, string setUrl = null, Dictionary <string, string> headers = null)
        {
            var url = string.Empty;

            if (headers == null)
            {
                headers = new Dictionary <string, string>();
            }
            try
            {
                if (context.Authentication?.EncryptKey?.Length == 16)
                {
                    context.Authentication.RemoteToken = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss").DES3Encrypt(context.Authentication.EncryptKey);
                }
                headers.Add("RPCContext", HttpUtility.UrlEncode(JsonConvert.SerializeObject(context)));
                url = @return.GetUrl(context);
                if (!string.IsNullOrWhiteSpace(setUrl))
                {
                    url = setUrl;                                    //(优先级 1)
                }
                var httpResponseMessage = await HttpHelper.Instance.PostAsync(url, JsonConvert.SerializeObject(@return), headers);

                if (httpResponseMessage == null || httpResponseMessage.Content == null)
                {
                    return(new ResultBase <TResponse>()
                    {
                        RequesArg = JsonConvert.SerializeObject(@return),
                        Code = HttpCodeEnum.C500,
                        IsUserErr = false,
                        ErrorMsg = $"请求结果HttpResponseMessage为null。请确认是否存在地址{url},或检查参数是否有误。",
                        RequestUrl = url,
                    });
                }
                var result = await httpResponseMessage.Content.ReadAsStringAsync();

                try
                {
                    var resultObj = JsonConvert.DeserializeObject <ResultBase <TResponse> >(result);
                    resultObj.RequestUrl = url;
                    return(resultObj);
                }
                catch (Exception ex)
                {
                    return(new ResultBase <TResponse>()
                    {
                        RequesArg = JsonConvert.SerializeObject(@return),
                        Code = HttpCodeEnum.C500,
                        IsUserErr = false,
                        ErrorMsg = $"{ex.Message} { ex.StackTrace} result:{result}",
                        RequestUrl = url,
                    });
                }
            }
            catch (Exception ex)
            {
                return(new ResultBase <TResponse>()
                {
                    RequesArg = JsonConvert.SerializeObject(@return),
                    Code = HttpCodeEnum.C500,
                    IsUserErr = false,
                    ErrorMsg = $"{ex.Message} { ex.StackTrace}",
                    RequestUrl = url,
                });
            }
        }