#region Copyright (C) 2016 Kevin (OSS开源系列) 公众号:osscoder /*************************************************************************** *   文件功能描述:OSS.Http.Extention - 通用请求结果扩展 * *   创建人: Kevin * 创建人Email:1985088337@qq.com * 创建时间: 2017-5-25 * *****************************************************************************/ #endregion using System; using System.Net.Http; using System.Threading.Tasks; using Newtonsoft.Json; using OSS.Common.ComModels; using OSS.Common.ComModels.Enums; using OSS.Common.Plugs; using OSS.Common.Plugs.LogPlug; using OSS.Http.Mos; namespace OSS.Http.Extention { /// /// 通用请求结果扩展 /// public static class OsRestExtention { /// /// 处理远程请求方法,并返回需要的实体 /// /// 需要返回的实体类型 /// 远程请求组件的request基本信息 /// 处理内容委托 /// 自定义httpclient /// 模块名称 /// 实体类型 public static async Task RestCommon(this OsHttpRequest request, Func> formatFunc, HttpClient client = null, string moduleName = ModuleNames.Default) where T : ResultMo, new() { T t; try { var resp = await request.RestSend(client); t = await formatFunc(resp); } catch (Exception ex) { t = new T() {ret = (int) ResultTypes.InnerError, msg = ex.Message}; LogUtil.Error(string.Concat("基类请求出错,错误信息:", ex.Message), "RestCommon", moduleName); } return t ?? new T() {ret = -1, msg = "未发现结果"}; } /// /// 使用json格式化内容方法 /// /// /// /// private static async Task JsonFormat(HttpResponseMessage resp) where TResp : ResultMo, new() { if (!resp.IsSuccessStatusCode) return new TResp() { ret = -(int) resp.StatusCode, msg = resp.ReasonPhrase }; var contentStr = await resp.Content.ReadAsStringAsync(); return JsonConvert.DeserializeObject(contentStr); } /// /// /// /// /// /// /// /// public static async Task RestCommonJson(this OsHttpRequest request, HttpClient client = null, string moduleName = ModuleNames.Default) where TResp : ResultMo, new() { return await RestCommon(request, JsonFormat, client, moduleName); } } }