using Newtonsoft.Json; using System.Net; using System.Text; namespace YLErp.App { /// /// API请求帮助类 /// static class ApiHelper { static readonly string BaseAddress = ""; static readonly HttpClient httpClient; static ApiHelper() { var handler = new HttpClientHandler { AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate }; httpClient = new HttpClient(handler) { Timeout = new TimeSpan(0, 3, 0), BaseAddress = new Uri(BaseAddress) }; httpClient.DefaultRequestHeaders.Connection.Add("keep-alive"); httpClient.DefaultRequestHeaders.Add("Keep-Alive", "600"); } //获取访问令牌 private static string GetAccessToken() { using (var request = new HttpRequestMessage() { Method = HttpMethod.Post, RequestUri = new Uri(httpClient.BaseAddress, "api/token"), }) { var auth = Convert.ToBase64String(Encoding.UTF8.GetBytes("superA:123321")); request.Headers.Add("Authorization", "Basic " + auth); using (var response = httpClient.SendAsync(request).Result) { var res = response.Content.ReadAsStringAsync().Result; var model = JsonConvert.DeserializeObject(res); if (model.errcode > 0) { throw new Exception(model.errmsg ?? "发生错误"); } return model.accessToken; } } } /// /// 请求API /// /// /// api路径 /// 请求数据 /// public static async Task GetRequestAsync(string apiPath) { var accessToken = GetAccessToken(); using (var request = new HttpRequestMessage() { Method = HttpMethod.Get, RequestUri = new Uri(httpClient.BaseAddress, apiPath.TrimStart('/')), }) { request.Headers.Add("Authorization", "Bearer " + accessToken); var response = await httpClient.SendAsync(request); return await response.Content.ReadAsStringAsync(); } } /// /// 请求API /// /// /// api路径 /// 请求数据 /// public static async Task RequestAsync(string apiPath, object postData = null) { var json = await RequestAsync(apiPath, postData); return JsonConvert.DeserializeObject(json); } /// /// 请求API /// /// api路径 /// 请求数据 /// public static async Task RequestAsync(string apiPath, object postData = null) { var accessToken = GetAccessToken(); using (var request = new HttpRequestMessage() { Method = HttpMethod.Post, RequestUri = new Uri(httpClient.BaseAddress, apiPath.TrimStart('/')), }) { request.Headers.Add("Authorization", "Bearer " + accessToken); if (postData != null) { var str = JsonConvert.SerializeObject(postData); request.Content = new StringContent(str, Encoding.UTF8, "application/json"); } var response = await httpClient.SendAsync(request); return await response.Content.ReadAsStringAsync(); } } class ErrorRsp { public int errcode { get; set; } public string errmsg { get; set; } } class TokenRsp : ErrorRsp { public string tokenType { get; set; } public string accessToken { get; set; } public int expiresIn { get; set; } public string userName { get; set; } } } }