#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);
}
}
}