/// <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, }); } }