123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- using AmrControl.Common.HttpClients;
- using Newtonsoft.Json;
- using Newtonsoft.Json.Converters;
- using System.Collections;
- namespace AmrControl.Common.HttpClients
- {
- public abstract class BaseHttpClient : IHttpRequest
- {
- /// <summary>
- /// httpclient
- /// </summary>
- protected readonly HttpClient _httpClient;
- /// <summary>
- /// 根路径
- /// </summary>
- protected readonly string baseUri;
- public BaseHttpClient(HttpClient httpClient, string baseUri)
- {
- _httpClient = httpClient;
- this.baseUri = baseUri;
- }
- public HttpRespResult sendRequest<T>(string url, T data)
- {
- return sendRequest(url, new(), data);
- }
- public HttpRespResult sendRequest<T>(string url, Dictionary<string, string> headers, T data)
- {
- var response = _httpClient.SendAsync(createRequest(reHandleUrl(url, data), headers, getMethod(), handleData(data))).Result;
- var rs = response.Content.ReadAsStringAsync().Result;
- return handleResult(response, rs);
- }
- /// <summary>
- /// 处理数据
- /// </summary>
- /// <param name="data"></param>
- /// <returns></returns>
- protected abstract HttpContent? handleData<T>(T data);
- /// <summary>
- /// 当前请求类型
- /// </summary>
- /// <returns></returns>
- protected abstract HttpMethod getMethod();
- /// <summary>
- /// 处理url,针对get等部分请求可能需要将参数放在url后面,此处做处理
- /// </summary>
- /// <param name="url"></param>
- /// <param name="data"></param>
- /// <returns></returns>
- protected virtual string reHandleUrl<T>(string url, T data)
- {
- if (baseUri.EndsWith("/"))
- {
- if (url.StartsWith("/"))
- {
- url = url[1..];
- }
- return baseUri + url;
- }
- else
- {
- if (url.StartsWith("/"))
- {
- return baseUri + url;
- }
- else
- {
- return baseUri + "/" + url;
- }
- }
- }
- /// <summary>
- /// 创建请求对象
- /// </summary>
- /// <param name="url"></param>
- /// <param name="headers"></param>
- /// <param name="method"></param>
- /// <param name="content"></param>
- /// <returns></returns>
- protected HttpRequestMessage createRequest(string url, Dictionary<string, string> headers, HttpMethod method, HttpContent? content)
- {
- var request = new HttpRequestMessage
- {
- Method = method,
- RequestUri = new Uri(url),
- Content = content
- };
- foreach (var head in headers)
- {
- request.Headers.Add(head.Key, head.Value);
- }
- return request;
- }
- /// <summary>
- /// 解析结果
- /// </summary>
- /// <param name="response"></param>
- /// <param name="rs"></param>
- /// <returns></returns>
- protected HttpRespResult handleResult(HttpResponseMessage response, string rs)
- {
- return new HttpRespResult()
- {
- code = response.IsSuccessStatusCode ? 200 : -1,
- message = response.IsSuccessStatusCode ? "发送成功" : rs,
- data = rs
- };
- }
- /// <summary>
- /// 类型转换
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="data"></param>
- /// <returns></returns>
- protected Dictionary<string, string> convertObj2Dict<T>(T data)
- {
- Dictionary<string, string> dict = new Dictionary<string, string>();
- if (data != null)
- {
- if (data is Dictionary<string, string>)
- {
- //若对象本身即是dictionary则直接返回
- return data as Dictionary<string, string>;
- }
- else if (data is IEnumerable || data.GetType().IsArray)
- {
- throw new Exception("不支持的转换类型");
- }
- else
- {
- return JsonConvert.DeserializeObject<Dictionary<string, string>>(JsonConvert.SerializeObject(data, new IsoDateTimeConverter() { DateTimeFormat = "yyyy-MM-dd HH:mm:ss" }));
- }
- }
- return dict;
- }
- }
- }
|