C#泛型接口请求封装类
2024-10-20 20:40:38
using HttpUtil;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Web; /// <summary>
/// 底层基础方法
/// </summary>
public class BaseClass
{
private static readonly string _faceIp = "192.168.0.1"; //人脸IP
private static readonly string _carIp = "192.168.0.2"; //车行IP
private static readonly int _port = 80; public BaseClass()
{
//
// TODO: 在此处添加构造函数逻辑
//
} /// <summary>
/// 停车场查询
/// </summary>
/// <param name="plateNo"></param>
/// <param name="pageSize"></param>
/// <param name="pageNumber"></param>
/// <returns></returns>
public static ParkingLotsInfoDto ParkingLotsInfoFun()
{
return CarPost<ParkingLotsInfoDto>("/vms/ParkingLotsInfo", new
{ });
} /// <summary>
/// 人脸
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="url"></param>
/// <param name="body"></param>
/// <returns></returns>
public static T FacePost<T>(string url, dynamic body)
{
string bodyStr = JsonConvert.SerializeObject(body);
return Core<T>(_faceIp+ _port + url, bodyStr, res =>
{
if (res.cipher == null) return default(T);
else return JsonConvert.DeserializeObject<T>(DesEncrypt(res.cipher.ToString()));
});
} /// <summary>
/// 车行
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="url"></param>
/// <param name="body"></param>
/// <returns></returns>
public static T CarPost<T>(string url, dynamic body)
{
string bodyStr = JsonConvert.SerializeObject(body);
return Core<T>(_carIp + _port + url, bodyStr, res =>
{
if (res.cipher == null) return default(T);
else return JsonConvert.DeserializeObject<T>(DesEncrypt(res.cipher.ToString()));
});
} private static T Core<T>(string url, string body, Func<YSResultMsg, T> resFunc)
{
try
{
var resStr = PostWebRequest(url, body);
if (resStr.IsNullOrEmpty())
{
BaseHelper.WriteLogs("YSAPI", "接口无返回数据请求失败!");
return default(T);
}
YSResultMsg res = JsonConvert.DeserializeObject<YSResultMsg>(resStr);
T ret = resFunc.Invoke(res);
return ret;
}
catch (Exception ex)
{
BaseHelper.WriteLogs("YSAPI_Error", "接口调用失败!" + ex.Message);
return default(T);
}
} public static string PostWebRequest(string postUrl, string paramData)
{
try
{
var requestParams = new { cipher = AesEncrypt(paramData), version="v2.0",timestamp=DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") };
string ret = string.Empty;
byte[] byteArray = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(requestParams)); //转化
HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(new Uri(postUrl));
webReq.Method = "POST";
webReq.ContentType = "application/x-www-form-urlencoded";
webReq.ContentLength = byteArray.Length;
Stream newStream = webReq.GetRequestStream();
newStream.Write(byteArray, 0, byteArray.Length);//写入参数
newStream.Close();
HttpWebResponse response = (HttpWebResponse)webReq.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
ret = sr.ReadToEnd();
sr.Close();
response.Close();
newStream.Close();
return ret;
}
catch (Exception ex)
{
return ex.Message;
}
} /// <summary>
/// AES加密
/// </summary>
/// <returns></returns>
protected static string AesEncrypt(string str)
{
return str;
} /// <summary>
/// AES解密
/// </summary>
/// <returns></returns>
protected static string DesEncrypt(string str)
{
return str;
} public class YSResultMsg
{
public string requestID { get; set; }
public string code { get; set; }
public string msg { get; set; }
public object cipher { get; set; }
}
} /// <summary>
/// 停车场功能
/// </summary>
public class ParkingLotsInfoDto
{
public int Num { get; set; }
public List<ParkingLotsInfoListDto> ParkingLotsInfoList { get; set; } public class ParkingLotsInfoListDto
{
public string ParkingLotName { get; set; }
public string ParkingLotID { get; set; }
public string TotalParkingNum { get; set; }
public string RemainParkingNum { get; set; }
public string RemainOpenParkingNum { get; set; }
}
}
最新文章
- ArrayList,Vector,LinkedList
- nltk27_NLTK聚类分析
- python操作mysql数据库的相关操作实例
- 使用while循环输入 1 2 3 4 5 6 8 9 10
- docker管理shipyard中文版v3.0.2更新
- RecyclerView导入依赖包
- 树莓派(Raspberry Pi)修改时区
- 6.3 Android Framework
- [转]Traits 编程技法+模板偏特化+template参数推导+内嵌型别编程技巧
- 网络资源(6) - EJB视频
- Android 运行时权限及APP适配
- UNIX环境高级编程——pthread_create的问题
- PowerDesigner软件建立新模型。
- ES6学习重难点总结(持续更新)
- 20175234 2018-2019-2 《Java程序设计》第九周学习总结
- 微信支付退款(PHP后端)
- Linux系统IO分析工具之iotstat常用参数介绍
- 我们在学习JDBC的时候会过度到J2EE。
- MyBatis学习笔记(一) 概述
- Git超实用总结