diff --git a/Assets/TEngine/Runtime/GameFramework/Utility/Utility.Http.cs b/Assets/TEngine/Runtime/GameFramework/Utility/Utility.Http.cs index f6af98ac..a3c16b84 100644 --- a/Assets/TEngine/Runtime/GameFramework/Utility/Utility.Http.cs +++ b/Assets/TEngine/Runtime/GameFramework/Utility/Utility.Http.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Threading; using Cysharp.Threading.Tasks; using UnityEngine; @@ -13,31 +14,94 @@ namespace TEngine /// public static partial class Http { - /// - /// GET请求与获取结果. - /// - public static async UniTask Get(string url,float timeout = 5f) + /// + /// GET请求与获取结果。 + /// + /// 网络URL。 + /// 超时时间。 + /// 请求结果。 + public static async UniTask Get(string url, float timeout = 5f) { var cts = new CancellationTokenSource(); cts.CancelAfterSlim(TimeSpan.FromSeconds(timeout)); UnityWebRequest unityWebRequest = UnityWebRequest.Get(url); + return await SendWebRequest(unityWebRequest, cts); + } + + /// + /// Post请求与获取结果. + /// + /// 网络URL。 + /// Post数据。 + /// 超时时间。 + /// 请求结果。 + public static async UniTask Post(string url, string postData, float timeout = 5f) + { + var cts = new CancellationTokenSource(); + cts.CancelAfterSlim(TimeSpan.FromSeconds(timeout)); + + UnityWebRequest unityWebRequest = UnityWebRequest.Post(url, postData); + return await SendWebRequest(unityWebRequest, cts); + } + + /// + /// Post请求与获取结果. + /// + /// 网络URL。 + /// Post数据。 + /// 超时时间。 + /// 请求结果。 + public static async UniTask Post(string url, Dictionary formFields, float timeout = 5f) + { + var cts = new CancellationTokenSource(); + cts.CancelAfterSlim(TimeSpan.FromSeconds(timeout)); + + UnityWebRequest unityWebRequest = UnityWebRequest.Post(url, formFields); + return await SendWebRequest(unityWebRequest, cts); + } + + /// + /// Post请求与获取结果. + /// + /// 网络URL。 + /// Post数据。 + /// 超时时间。 + /// 请求结果。 + public static async UniTask Post(string url, WWWForm formData, float timeout = 5f) + { + var cts = new CancellationTokenSource(); + cts.CancelAfterSlim(TimeSpan.FromSeconds(timeout)); + + UnityWebRequest unityWebRequest = UnityWebRequest.Post(url, formData); + return await SendWebRequest(unityWebRequest, cts); + } + + /// + /// 抛出网络请求。 + /// + /// UnityWebRequest。 + /// CancellationTokenSource。 + /// 请求结果。 + public static async UniTask SendWebRequest(UnityWebRequest unityWebRequest, CancellationTokenSource cts) + { try { var (isCanceled, _) = await unityWebRequest.SendWebRequest().WithCancellation(cts.Token).SuppressCancellationThrow(); if (isCanceled) { - Log.Warning($"HttpGet {url} be canceled!"); + Log.Warning($"HttpPost {unityWebRequest.url} be canceled!"); } } catch (OperationCanceledException ex) { if (ex.CancellationToken == cts.Token) { - Log.Debug("HttpGet Timeout"); + Log.Debug("HttpPost Timeout"); return string.Empty; } } + return unityWebRequest.downloadHandler.text; } }