using Cysharp.Threading.Tasks; using UnityEngine; using UnityEngine.Networking; using System.Text; using Newtonsoft.Json; using UnityEngine.Events; using System; /// /// 异步封装unityWebRequest请求 /// public static class NetManager { /// /// 发送GET请求并返回结果 /// /// 返回结果的类型 /// 请求的URL /// 请求完成后的回调函数 /// 请求结果 public static async UniTask Get(string url, UnityAction onComplete) { return await SendRequest(url, RequestType.GET, null, onComplete); } /// /// 发送GET请求 /// /// 请求的URL /// 请求完成后的回调函数 public static async UniTask Get(string url, UnityAction onComplete) { await SendRequest(url, RequestType.GET, null, onComplete); } /// /// 发送POST请求并返回结果 /// /// 返回结果的类型 /// 请求的URL /// 请求的负载数据 /// 请求完成后的回调函数 /// 请求结果 public static async UniTask Post(string url, object payload, UnityAction onComplete) { return await SendRequest(url, RequestType.POST, payload, onComplete); } /// /// 发送POST请求 /// /// 请求的URL /// 请求的负载数据 /// 请求完成后的回调函数 public static async UniTask Post(string url, object payload, UnityAction onComplete) { await SendRequest(url, RequestType.POST, payload, onComplete); } /// /// 发送请求并返回结果 /// /// 返回结果的类型 /// 请求的URL /// 请求类型 /// 请求的负载数据 /// 请求完成后的回调函数 /// 请求结果 private static async UniTask SendRequest(string url, RequestType type, object payload, UnityAction onComplete) { var request = CreateRequest(url, type, payload); try { await request.SendWebRequest(); if (request.result != UnityWebRequest.Result.Success) { Debug.LogError($"Request failed: {request.error}"); throw new System.Exception($"Request failed: {request.error}"); } T result = JsonConvert.DeserializeObject(request.downloadHandler.text); onComplete?.Invoke(result); return result; } catch (Exception ex) { Debug.LogError($"Exception during request: {ex.Message}"); throw; } finally { request.Dispose(); } } /// /// 发送请求 /// /// 请求的URL /// 请求类型 /// 请求的负载数据 /// 请求完成后的回调函数 private static async UniTask SendRequest(string url, RequestType type, object payload, UnityAction onComplete) { var request = CreateRequest(url, type, payload); try { await request.SendWebRequest(); if (request.result != UnityWebRequest.Result.Success) { Debug.LogError($"Request failed: {request.error}"); throw new System.Exception($"Request failed: {request.error}"); } onComplete?.Invoke(); } catch (Exception ex) { Debug.LogError($"Exception during request: {ex.Message}"); throw; } finally { request.Dispose(); } } /// /// 创建UnityWebRequest请求 /// /// 请求的URL /// 请求类型 /// 请求的负载数据 /// UnityWebRequest实例 private static UnityWebRequest CreateRequest(string url, RequestType type = RequestType.GET, object data = null) { var request = new UnityWebRequest(url, type.ToString()); if (data != null) { string reqJson = JsonConvert.SerializeObject(data); var bodyRaw = Encoding.UTF8.GetBytes(reqJson); request.uploadHandler = new UploadHandlerRaw(bodyRaw); } request.downloadHandler = new DownloadHandlerBuffer(); request.SetRequestHeader("Content-Type", "application/json"); //request.SetRequestHeader("auth_token", GlobalFlag.token); return request; } /// /// 请求类型 /// public enum RequestType { GET = 0, POST = 1 } }