using Newtonsoft.Json; using ReleaseHelper.Models; using ReleaseHelper.Utils; using System; using System.Collections.Generic; using System.Net; using System.Net.Http; using System.Text.RegularExpressions; using System.Threading.Tasks; namespace ReleaseHelper.Services { public static class Api { public delegate void DeleLogin(bool runAfterLoginFn); public static DeleLogin LoginFn; private const int PAGE_SIZE = 999999; private const int PAGE_NO = 1; /// /// 登录 /// /// /// /// public static async Task Login(string username, string password) { UserLoginPost loginResponse = null; var (code, response) = await Fetch( new Http.Request(@"v1/user/login", Http.Method.Post, new Dictionary { { "username", username} , { "password", password} } )); if (!string.IsNullOrEmpty(response)) { loginResponse = Json.Decode(response); Variables.Variables.RequestHeaders["Authorization"] = "Bearer " + loginResponse.Token; } return loginResponse; } /// /// 获取静态文件流 /// /// /// public static async Task GetStaticFileBytes(string fileName) { byte[] result = null; fileName = Regex.Replace(fileName, @"^[\/\\]*", ""); long begin = Functions.GetTimeStamp(), end; Http.Request request = new Http.Request($"{Variables.Const.HTTP_STATIC_HOST}{fileName}", Http.Method.Get); end = Functions.GetTimeStamp(); Log.WriteLine($"request static file create http: {end - begin}"); begin = end; using (HttpResponseMessage response = await Http.Fetch(request)) { end = Functions.GetTimeStamp(); Log.WriteLine($"request static file fetch http: {end - begin}"); begin = end; if (response != null && response.StatusCode == HttpStatusCode.OK) { result = response.Content.ReadAsByteArrayAsync().Result; end = Functions.GetTimeStamp(); Log.WriteLine($"request static file read byte: {end - begin}"); begin = end; } } return result; } /// /// 获取升级信息 /// /// public static async Task GetUpdateInfo(string ossFileUri) { UpdateInfo info = new UpdateInfo(); try { string url = Regex.Replace(ossFileUri, "\\.[^.]{2,5}$", ".txt", RegexOptions.IgnoreCase); HttpResponseMessage response = await Http.Fetch(new Http.Request(url, Http.Method.Get)); if (response.IsSuccessStatusCode) { string txt = await response.Content.ReadAsStringAsync(); info = Utils.Json.Decode(txt); } } catch { } return info; } /// /// 获取阿里云OSS STS 权限 /// /// public static async Task GetAliyunAccess() { var (code, response) = await Fetch(new Http.Request(@"v1/oss/authorize", Http.Method.Post, null)); return Json.Decode(response); //return GetResponse(@"v1/oss/authorize", Http.Method.Post, null); } /// /// 获取系统返回的内容 /// /// /// /// /// /// private static async Task GetResponse(string url, Http.Method method, Dictionary data) { T res = default; var (code, response) = await Fetch(new Http.Request(url, method, data)); if (!string.IsNullOrEmpty(response)) { var tmp = Json.Decode>(response); if (tmp != null && tmp.ContainsKey("result")) { res = Json.Decode(tmp["result"].ToString()); } } return res; } #region 私有方法 /// /// 请求 /// /// /// private static async Task<(int, string)> Fetch(Http.Request request) { foreach (var item in Variables.Variables.RequestHeaders) { // 添加请求头 request.headers.Add(item.Key, item.Value); } // 请求地址 request.uri = string.Concat(Variables.Const.HTTP_HOST, request.uri); string apiResponse = null; int code = 200; Dictionary resp; using (HttpResponseMessage response = await Http.Fetch(request)) { if (response != null) { switch (response.StatusCode) { case HttpStatusCode.OK: // 正常响应 resp = JsonConvert.DeserializeObject>(await response.Content.ReadAsStringAsync()); //apiResponse = Json.Decode(response.Content.ReadAsStreamAsync().Result); code = Convert.ToInt32(resp["code"]); switch (code) { case 400: Response400(); apiResponse = resp["errors"] != null ? resp["errors"].ToString() : "接口错误"; break; case 401: Response401(); break; case 4000: Response401(); break; case 404: Response404(); break; case 500: Response500(); apiResponse = resp["errors"].ToString(); break; case 502: Response500(); break; //case 1001: // apiResponse = resp["msg"].ToString(); //break; default: apiResponse = resp["data"] != null ? resp["data"].ToString() : ""; break; } break; case HttpStatusCode.NotFound: // 页面不存在 Response404(); break; case HttpStatusCode.Unauthorized: // 无权限 Response401(); break; case HttpStatusCode.BadRequest: // 页面错误 Response400(); break; default: // 其它错误 Response500(); break; } } else { // 没有网络 } } //Log.WriteLine($"{request.uri}:{apiResponse}"); return (code, apiResponse); } private static void Response400() { } private static void Response401() { //void act() //{ // Forms.Instances.FormLogin.ShowDialog(Forms.Instances.MainEntrance); // Forms.Instances.FormLogin.ReLogin(); //} //Utils.ControlExtensions.FormInvoke(Forms.Instances.FormLogin, act); LoginFn?.Invoke(false); //Forms.Instances.FormLogin.ShowDialog(Forms.Instances.MainEntrance); //Forms.Instances.FormLogin.ReLogin(); } private static void Response404() { } private static void Response500() { } #endregion } }