139 lines
4.7 KiB
C#
139 lines
4.7 KiB
C#
using MegaRobo.Contract;
|
||
using Newtonsoft.Json;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using System.Net.Http;
|
||
using System.Net.Http.Headers;
|
||
using System.Text;
|
||
using System.Threading.Tasks;
|
||
|
||
namespace MegaRobo.C00225155.ControlDevices
|
||
{
|
||
public class Response<T>
|
||
{
|
||
public int statusCode { get; set; }
|
||
public string errorCode { get; set; }
|
||
public string errorMessage { get; set; }
|
||
public string message { get; set; }
|
||
public T data { get; set; }
|
||
}
|
||
|
||
public class HttpOperateHelper : IDisposable
|
||
{
|
||
private readonly HttpClient httpClient;
|
||
|
||
private bool _disposed = false;
|
||
|
||
public HttpOperateHelper()
|
||
{
|
||
// 初始化HttpClient,设置默认超时和请求头
|
||
httpClient = new HttpClient();
|
||
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
|
||
httpClient.Timeout = TimeSpan.FromSeconds(30); // 设置超时时间
|
||
}
|
||
|
||
// 通用的POST请求方法(适用于[HttpPost]接口)
|
||
public async Task<Response<T?>> PostAsync<T>(string url, object data = null)
|
||
{
|
||
try
|
||
{
|
||
string jsonData = data != null ? JsonConvert.SerializeObject(data) : "{}";
|
||
var content = new StringContent(jsonData, Encoding.UTF8, "application/json");
|
||
var response = await httpClient.PostAsync(url, content);
|
||
response.EnsureSuccessStatusCode(); // 抛出HTTP错误状态码异常
|
||
string responseJson = await response.Content.ReadAsStringAsync();
|
||
return JsonConvert.DeserializeObject<Response<T>>(responseJson);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
return new Response<T>
|
||
{
|
||
statusCode = 1,
|
||
errorMessage = $"请求失败:{ex.Message}"
|
||
};
|
||
}
|
||
}
|
||
|
||
// 通用的PUT请求方法(适用于[HttpPut]接口)
|
||
public async Task<Response<T>> PutAsync<T>(string url, object data = null)
|
||
{
|
||
try
|
||
{
|
||
string jsonData = data != null ? JsonConvert.SerializeObject(data) : "{}";
|
||
var content = new StringContent(jsonData, Encoding.UTF8, "application/json");
|
||
var response = await httpClient.PutAsync(url, content);
|
||
response.EnsureSuccessStatusCode();
|
||
string responseJson = await response.Content.ReadAsStringAsync();
|
||
return JsonConvert.DeserializeObject<Response<T>>(responseJson);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
return new Response<T>
|
||
{
|
||
statusCode = 1,
|
||
errorMessage = $"请求失败:{ex.Message}"
|
||
};
|
||
}
|
||
}
|
||
|
||
// 通用的DELETE请求方法(适用于[HttpDelete]接口)
|
||
public async Task<Response<T>> DeleteAsync<T>(string url)
|
||
{
|
||
try
|
||
{
|
||
var response = await httpClient.DeleteAsync(url);
|
||
response.EnsureSuccessStatusCode();
|
||
string responseJson = await response.Content.ReadAsStringAsync();
|
||
return JsonConvert.DeserializeObject<Response<T>>(responseJson);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
return new Response<T>
|
||
{
|
||
statusCode = 1,
|
||
errorMessage = $"请求失败:{ex.Message}"
|
||
};
|
||
}
|
||
}
|
||
|
||
// 通用的GET请求方法(适用于[HttpGet]接口)
|
||
public async Task<Response<T>> GetAsync<T>(string url)
|
||
{
|
||
try
|
||
{
|
||
var response = await httpClient.GetAsync(url);
|
||
response.EnsureSuccessStatusCode();
|
||
string responseJson = await response.Content.ReadAsStringAsync();
|
||
return JsonConvert.DeserializeObject<Response<T>>(responseJson);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
return new Response<T>
|
||
{
|
||
statusCode = 1,
|
||
errorMessage = $"请求失败:{ex.Message}"
|
||
};
|
||
}
|
||
}
|
||
|
||
|
||
// 释放资源(实现IDisposable接口)
|
||
public void Dispose()
|
||
{
|
||
Dispose(true);
|
||
GC.SuppressFinalize(this);
|
||
}
|
||
|
||
protected virtual void Dispose(bool disposing)
|
||
{
|
||
if (_disposed) return;
|
||
if (disposing)
|
||
{
|
||
httpClient?.Dispose(); // 释放HttpClient
|
||
}
|
||
_disposed = true;
|
||
}
|
||
}
|
||
}
|