DeviceManager/DeviceRepairAndOptimization/Utils/ApiHelper.cs
2024-05-28 22:36:38 +08:00

298 lines
10 KiB
C#

using CsharpHttpHelper;
using CsharpHttpHelper.Enum;
using DeviceRepairAndOptimization.Data;
using DeviceRepairAndOptimization.Data.Auth;
using DeviceRepairAndOptimization.Models;
using Newtonsoft.Json;
using System;
using System.IO;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using System.Web;
namespace DeviceRepairAndOptimization.Utils
{
public class ApiHelper
{
HttpHelper http = null;
public static readonly string ServiceUrl = $"http://{Models.Config.Configurations.Properties.ServiceIP}/DeviceRepairAPI/";
private static ApiHelper manager;
public static ApiHelper Instance
{
get
{
if (manager == null)
manager = new ApiHelper();
return manager;
}
}
/// <summary>
/// 方法参数初始化
/// </summary>
/// <param name="item"></param>
public void Init(ref HttpItem item)
{
if (http == null)
http = new HttpHelper();
if (item == null)
throw new Exception("调用API失败,参数不能为null!");
if (string.IsNullOrEmpty(ServiceUrl))
throw new Exception("调用API失败,参数ServiceUrl不能为null!");
item.Header.Add("auth", GlobalInfo.token);
if (GlobalInfo.CurrentUser != null)
{
item.Header.Add("Operator", GlobalInfo.CurrentUser?.AutoID + "");
item.Header.Add("OperatorName", EncryptionHelper.UrlEncry(GlobalInfo.CurrentUser?.RealName));
}
item.Header.Add("ClientMac", ComputerHelper.GetMacAddress);
item.Header.Add("IPAddress", ComputerHelper.GetIPAddress);
item.Header.Add("ClientName", ComputerHelper.GetComputerName);
item.Timeout = 10000;
item.PostEncoding = Encoding.UTF8;
item.URL = JoinUrl(item.URL);
}
/// <summary>
/// URL 拼接
/// </summary>
/// <param name="relativePath"></param>
/// <returns></returns>
private string JoinUrl(string relativePath)
{
relativePath = relativePath.TrimStart('/');
// 使用 UriKind.Absolute 表示 baseUrl 是绝对路径
var baseUri = new Uri(ServiceUrl, UriKind.Absolute);
var relativeUri = new Uri(baseUri, relativePath);
return relativeUri.ToString();
}
public APIResponseData SendMessage(HttpItem item)
{
try
{
Init(ref item);
//请求的返回值对象
HttpResult result = http.GetHtml(item);
if (result.StatusCode != HttpStatusCode.OK)
throw new Exception(result.Html);
//获取返回值
APIResponseData apiResponseData = JsonConvert.DeserializeObject<APIResponseData>(result.Html);
return apiResponseData;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
public void SendMessageAsync(HttpItem item, ResultHandler resultHandler)
{
try
{
Init(ref item);
//开始异步调用
http.BeginInvokeGetHtml(item, resultHandler);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
public string DownLoadFile(HttpItem item)
{
try
{
Init(ref item);
item.ResultType = ResultType.Byte;
//请求的返回值对象
HttpResult result = http.GetHtml(item);
WebHeaderCollection header = result.Header;
if (header != null)
{
string fileName = header["FileName"];
if (!string.IsNullOrWhiteSpace(fileName))
{
string CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory;
if (!Directory.Exists(Path.Combine(CurrentDirectory, "Cache")))
Directory.CreateDirectory(Path.Combine(CurrentDirectory, "Cache"));
File.WriteAllBytes(Path.Combine(CurrentDirectory, "Cache", fileName), result.ResultByte);
return Path.Combine(CurrentDirectory, "Cache", fileName);
}
}
return string.Empty;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
/// <summary>
/// 获取服务器时间
/// </summary>
/// <returns></returns>
public string GetServiceTime()
{
try
{
HttpItem item = new HttpItem
{
URL = ServiceRoute.GetCurrentDateTime,
Method = "Post",
ContentType = "application/text; charset=utf-8",
};
Init(ref item);
//请求的返回值对象
HttpResult result = http.GetHtml(item);
//获取返回值
string CurrentDateTime = result.Html.Trim('"');
return CurrentDateTime ?? "";
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
/// <summary>
/// 判断当前用户是否具有某些权限
/// </summary>
/// <param name="AuthCode"></param>
/// <returns></returns>
public APIResponseData RoleExistsAuth(string AuthCode)
{
APIResponseData apiResponseData = new APIResponseData { Code = -1 };
bool flag = false;
try
{
switch (Models.Config.Configurations.Properties.ConnType?.ToLower())
{
case "api":
#region api
apiResponseData = Instance.SendMessage(new HttpItem
{
URL = ServiceRoute.RoleExistsAuth,
Method = "Post",
ContentType = "application/json;charset=utf-8",
Postdata = JsonConvert.SerializeObject(new { AuthCode = AuthCode, UserID = GlobalInfo.CurrentUser.AutoID })
});
#endregion
break;
case "sql":
#region sql
apiResponseData = AuthAccess.Instance.RoleExistsAuth(AuthCode, GlobalInfo.CurrentUser.AutoID);
#endregion
break;
default:
break;
}
return apiResponseData;
}
catch (Exception ex)
{
apiResponseData.Code = -1;
apiResponseData.Message = ex.Message;
}
return apiResponseData;
}
public APIResponseData PostWebRequest(string postUrl, string paramData, string token)
{
string ret = string.Empty;
try
{
byte[] byteArray = Encoding.UTF8.GetBytes(paramData); //转化 /
HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(JoinUrl(postUrl));
webReq.Method = "POST";
webReq.ContentType = "application/json; charset=utf-8";
webReq.ContentLength = byteArray.Length;
webReq.Credentials = CredentialCache.DefaultCredentials;
if (!string.IsNullOrEmpty(token))
webReq.Headers.Add("auth", token);
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 JsonConvert.DeserializeObject<APIResponseData>(ret);
}
catch (Exception)
{
return null;
}
}
/// <summary>
/// 文件上传
/// </summary>
/// <param name="filePath"></param>
/// <returns></returns>
public async Task<APIResponseData> UploadFileAsync(string ServerUrl, FileStream fileStream, string fileName)
{
try
{
ServerUrl = JoinUrl(ServerUrl);
using (HttpClient _httpClient = new HttpClient())
//using (var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
using (var multipartContent = new MultipartFormDataContent())
{
_httpClient.DefaultRequestHeaders.Add("auth", GlobalInfo.token);
var fileContent = new StreamContent(fileStream);
fileContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("multipart/form-data");
fileContent.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment")
{
FileName = fileName,
Size = fileStream.Length
};
multipartContent.Add(fileContent, "file", fileName);
HttpResponseMessage response = await _httpClient.PostAsync(ServerUrl, multipartContent);
if (response.IsSuccessStatusCode)
{
string content = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<APIResponseData>(content);
}
return new APIResponseData { Code = -1 };
}
}
catch (Exception e)
{
return new APIResponseData { Code = -1, Message = e.Message };
}
}
}
}