/// <summary> /// 处理远程请求方法,并返回需要的实体 /// </summary> /// <typeparam name="T">需要返回的实体类型</typeparam> /// <param name="request">远程请求组件的request基本信息</param> /// <param name="respColumnName">响应实体中的内容列表</param> /// <param name="funcFormat">获取实体格式化方法</param> /// <returns>实体类型</returns> public async Task <T> RestCommonAsync <T>(OsHttpRequest request, string respColumnName, Func <HttpResponseMessage, Task <T> > funcFormat = null) where T : ZPayBaseResp, new() { var t = default(T); try { request.AddressUrl = string.Concat(m_ApiUrl, "?charset=", ApiConfig.Charset); request.RequestSet = r => { if (r.Content == null) { return; } var contentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded") { CharSet = ApiConfig.Charset }; r.Content.Headers.ContentType = contentType; }; var resp = await request.RestSend(); if (resp.IsSuccessStatusCode) { if (funcFormat != null) { t = await funcFormat(resp); } else { var contentStr = await resp.Content.ReadAsStringAsync(); var resJsonObj = JObject.Parse(contentStr); if (resJsonObj == null) { return new T() { ret = (int)ResultTypes.ObjectStateError, msg = "基础请求响应不正确,请检查地址或者网络是否正常!" } } ; t = resJsonObj[respColumnName].ToObject <T>(); if (t.IsSuccess()) { var sign = resJsonObj["sign"].ToString(); var signContent = GetCehckSignContent(respColumnName, contentStr); CheckSign(signContent, sign, t); } else { t.msg = string.Concat(t.msg, "-", t.sub_msg); } } } } catch (Exception ex) { var logCode = LogUtil.Error(string.Concat("基类请求出错,错误信息:", ex.Message), "Z_RestCommon", ModuleNames.SocialCenter); t = new T() { ret = (int)ResultTypes.InnerError, msg = string.Concat("基类请求出错,请检查网络是否正常,错误码:", logCode) }; } return(t); }
/// <summary> /// 执行请求方法 /// </summary> /// <param name="client"></param> /// <param name="request"></param> /// <param name="completionOption"></param> /// <returns></returns> public static Task <HttpResponseMessage> RestSend(this HttpClient client, OsHttpRequest request, HttpCompletionOption completionOption) { return(RestSend(client, request, completionOption, CancellationToken.None)); }
/// <summary> /// /// </summary> /// <typeparam name="TResp"></typeparam> /// <param name="request"></param> /// <param name="client"></param> /// <param name="moduleName"></param> /// <returns></returns> public static async Task <TResp> RestCommonJson <TResp>(this OsHttpRequest request, HttpClient client = null, string moduleName = ModuleNames.Default) where TResp : ResultMo, new() { return(await RestCommon(request, JsonFormat <TResp>, client, moduleName)); }
/// <summary> /// 同步的请求方式 /// </summary> /// <param name="request">请求的参数</param> /// <param name="client"></param> /// <returns>自定义的Response结果</returns> public static Task <HttpResponseMessage> RestSend(this OsHttpRequest request, HttpClient client = null) { return(RestSend(request, HttpCompletionOption.ResponseContentRead, CancellationToken.None, client)); }