This commit is contained in:
2025-09-24 14:28:10 +08:00
parent 2ff8645af6
commit 14f74b229c
4 changed files with 255 additions and 119 deletions

View File

@@ -10,6 +10,8 @@ using UnityEngine.Networking;
namespace Stary.Evo
{
public static class WebRequestSystem
{
private static string authorization;
@@ -30,11 +32,14 @@ namespace Stary.Evo
string postData = JsonConvert.SerializeObject(data);
try
{
#if UNITY_2021_3_OR_NEWER
using UnityWebRequest webRequest = UnityWebRequest.PostWwwForm(url, postData);
#else
using UnityWebRequest webRequest = UnityWebRequest.PostWwwForm(url, postData);
#endif
using UnityWebRequest webRequest = new UnityWebRequest(url, UnityWebRequest.kHttpVerbPOST);
webRequest.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();
if (string.IsNullOrEmpty(postData))
{
Debug.LogError("WebRequestSystem.Login postData is null");
return false;
}
byte[] postBytes = System.Text.Encoding.UTF8.GetBytes(postData);
webRequest.uploadHandler = new UploadHandlerRaw(postBytes);
@@ -85,7 +90,10 @@ namespace Stary.Evo
authorization = EditorPrefs.GetString("Authorization");
try
{
using UnityWebRequest webRequest = UnityWebRequest.Get($"{url}?token={authorization}");
using UnityWebRequest webRequest =
new UnityWebRequest($"{url}/{authorization}", UnityWebRequest.kHttpVerbGET);
//using UnityWebRequest webRequest = UnityWebRequest.Get($"{url}?token={authorization}");
webRequest.downloadHandler = new DownloadHandlerBuffer();
webRequest.timeout = 10;
await webRequest.SendWebRequest();
@@ -146,6 +154,7 @@ namespace Stary.Evo
try
{
using UnityWebRequest webRequest = UnityWebRequest.Post(url, form);
webRequest.SetRequestHeader("Authorization", authorization);
webRequest.disposeUploadHandlerOnDispose = true;
webRequest.disposeDownloadHandlerOnDispose = true;
@@ -256,8 +265,77 @@ namespace Stary.Evo
}
}
/// <summary>
/// GET请求数据
/// 携带数据:否
/// 幂等性:是
/// </summary>
/// <param name="url">请求数据的URL地址</param>
/// <param name="path">请求数据的路径</param>
/// <returns></returns>
public static async Task<ResultMessageEntity> Get(string url, string path)
{
if (!GetTokenState())
{
Debug.LogError("用户未登录,请先登录");
return new ResultMessageEntity()
{
code = 2001,
message = "用户未登录,请先登录"
};
}
try
{
string fullUrl = url.TrimEnd('/') + "/" + path.TrimStart('/');
using UnityWebRequest webRequest = new UnityWebRequest(fullUrl, UnityWebRequest.kHttpVerbGET);
webRequest.downloadHandler = new DownloadHandlerBuffer();
if (authorization != null)
webRequest.SetRequestHeader("Authorization", authorization); // 修正请求头名称规范
webRequest.timeout = 20;
await webRequest.SendWebRequest();
// 增强错误处理
if (webRequest.result != UnityWebRequest.Result.Success)
{
var errorMsg = $"HTTP {webRequest.responseCode}\n" +
$"URL: {url}\n" +
$"Error: {webRequest.error}\n" +
$"Response: {webRequest.downloadHandler.text}";
Debug.LogError(errorMsg);
return new ResultMessageEntity()
{
code = 5001,
message = errorMsg
};
}
ResultMessageEntity resultMessageEntity =
JsonConvert.DeserializeObject<ResultMessageEntity>(webRequest.downloadHandler.text);
if (resultMessageEntity.code != 200)
{
Debug.LogError(resultMessageEntity.message);
}
return resultMessageEntity;
}
catch (Exception e)
{
Debug.LogError($"UnityEvo:WebRequestSystem.Get" + e.Message);
return new ResultMessageEntity()
{
code = 5001,
message = e.Message
};
}
}
/// <summary>
/// POST请求数据
/// 携带数据:是
/// 幂等性:否
/// </summary>
/// <param name="url">获取Token值的服务URL地址很重要</param>
/// <param name="postData">传入请求的参数此处参数为JOSN格式</param>
@@ -276,44 +354,44 @@ namespace Stary.Evo
try
{
#if UNITY_2021_3_OR_NEWER
using (UnityWebRequest webRequest = UnityWebRequest.PostWwwForm(url, postData)) //第二种写法此行注释
#else
using (UnityWebRequest webRequest = UnityWebRequest.PostWwwForm(url, postData)) //第二种写法此行注释
#endif
using UnityWebRequest webRequest = new UnityWebRequest(url, UnityWebRequest.kHttpVerbPOST);
// #if UNITY_2021_3_OR_NEWER
// using (UnityWebRequest webRequest = UnityWebRequest.PostWwwForm(url, postData)) //第二种写法此行注释
// #else
// using (UnityWebRequest webRequest = UnityWebRequest.PostWwwForm(url, postData)) //第二种写法此行注释
// #endif
webRequest.downloadHandler = new DownloadHandlerBuffer();
byte[] postBytes = System.Text.Encoding.UTF8.GetBytes(postData);
webRequest.uploadHandler = new UploadHandlerRaw(postBytes);
webRequest.SetRequestHeader("Content-Type", "application/json");
webRequest.SetRequestHeader("Authorization", authorization);
webRequest.disposeUploadHandlerOnDispose = true;
webRequest.disposeDownloadHandlerOnDispose = true;
webRequest.disposeCertificateHandlerOnDispose = true;
webRequest.timeout = 20;
await webRequest.SendWebRequest();
webRequest.uploadHandler?.Dispose();
// 更新错误检查方式
if (webRequest.result == UnityWebRequest.Result.ConnectionError ||
webRequest.result == UnityWebRequest.Result.ProtocolError)
{
byte[] postBytes = System.Text.Encoding.UTF8.GetBytes(postData);
webRequest.uploadHandler = new UploadHandlerRaw(postBytes);
webRequest.SetRequestHeader("Content-Type", "application/json");
webRequest.SetRequestHeader("Authorization", authorization);
webRequest.disposeUploadHandlerOnDispose = true;
webRequest.disposeDownloadHandlerOnDispose = true;
webRequest.disposeCertificateHandlerOnDispose = true;
webRequest.timeout = 20;
await webRequest.SendWebRequest();
webRequest.uploadHandler?.Dispose();
// 更新错误检查方式
if (webRequest.result == UnityWebRequest.Result.ConnectionError ||
webRequest.result == UnityWebRequest.Result.ProtocolError)
Debug.LogError(webRequest.error);
return new ResultMessageEntity()
{
Debug.LogError(webRequest.error);
return new ResultMessageEntity()
{
code = 5001,
message = webRequest.error
};
code = 5001,
message = webRequest.error
};
}
else
{
ResultMessageEntity resultMessageEntity =
JsonConvert.DeserializeObject<ResultMessageEntity>(webRequest.downloadHandler.text);
if (resultMessageEntity.code != 200)
{
Debug.LogError(resultMessageEntity.message);
}
else
{
ResultMessageEntity resultMessageEntity =
JsonConvert.DeserializeObject<ResultMessageEntity>(webRequest.downloadHandler.text);
if (resultMessageEntity.code != 200)
{
Debug.LogError(resultMessageEntity.message);
}
return resultMessageEntity;
}
return resultMessageEntity;
}
}
catch (Exception e)
@@ -328,78 +406,16 @@ namespace Stary.Evo
}
}
/// <summary>
/// GET请求数据
/// </summary>
/// <param name="url">请求数据的URL地址</param>
/// <param name="path">请求数据的路径</param>
/// <returns></returns>
public static async Task<ResultMessageEntity> Get(string url,string path)
{
if (!GetTokenState())
{
Debug.LogError("用户未登录,请先登录");
return new ResultMessageEntity()
{
code = 2001,
message = "用户未登录,请先登录"
};
}
try
{
string fullUrl = url.TrimEnd('/') + "/" + path.TrimStart('/');
using UnityWebRequest webRequest = UnityWebRequest.Get(fullUrl);
webRequest.downloadHandler = new DownloadHandlerBuffer();
if (authorization != null)
webRequest.SetRequestHeader("Authorization", authorization); // 修正请求头名称规范
webRequest.timeout = 20;
await webRequest.SendWebRequest();
// 增强错误处理
if (webRequest.result != UnityWebRequest.Result.Success)
{
var errorMsg = $"HTTP {webRequest.responseCode}\n" +
$"URL: {url}\n" +
$"Error: {webRequest.error}\n" +
$"Response: {webRequest.downloadHandler.text}";
Debug.LogError(errorMsg);
return new ResultMessageEntity()
{
code = 5001,
message = errorMsg
};
}
ResultMessageEntity resultMessageEntity =
JsonConvert.DeserializeObject<ResultMessageEntity>(webRequest.downloadHandler.text);
if (resultMessageEntity.code != 200)
{
Debug.LogError(resultMessageEntity.message);
}
return resultMessageEntity;
}
catch (Exception e)
{
Debug.LogError($"UnityEvo:WebRequestSystem.Get" + e.Message);
return new ResultMessageEntity()
{
code = 5001,
message = e.Message
};
}
}
/// <summary>
/// Delete请求数据
/// 携带数据:否
/// 幂等性:是
/// </summary>
/// <param name="url">请求数据的URL地址</param>
/// <param name="path">请求数据的路径</param>
/// <returns></returns>
public static async Task<ResultMessageEntity> Delete(string url,string path)
public static async Task<ResultMessageEntity> Delete(string url, string path)
{
if (!GetTokenState())
{
@@ -415,7 +431,7 @@ namespace Stary.Evo
{
// 修复URL拼接
string fullUrl = url.TrimEnd('/') + "/" + path.TrimStart('/');
using UnityWebRequest webRequest = UnityWebRequest.Delete(fullUrl);
using UnityWebRequest webRequest = new UnityWebRequest(fullUrl, UnityWebRequest.kHttpVerbDELETE);
webRequest.downloadHandler = new DownloadHandlerBuffer();
if (authorization != null)
webRequest.SetRequestHeader("Authorization", authorization); // 修正请求头名称规范
@@ -438,6 +454,7 @@ namespace Stary.Evo
message = errorMsg
};
}
// 修复空响应处理
string responseText = webRequest.downloadHandler.text;
if (string.IsNullOrEmpty(responseText))
@@ -448,6 +465,7 @@ namespace Stary.Evo
message = "删除成功"
};
}
ResultMessageEntity resultMessageEntity =
JsonConvert.DeserializeObject<ResultMessageEntity>(webRequest.downloadHandler.text);
if (resultMessageEntity.code != 200)
@@ -467,6 +485,94 @@ namespace Stary.Evo
};
}
}
/// <summary>
/// PUT请求数据
/// 携带数据:是
/// 幂等性:是
/// </summary>
/// <param name="url">请求数据的URL地址</param>
/// <param name="path">请求数据的路径</param>
/// <param name="putData">要更新的数据JSON格式</param>
/// <returns></returns>
public static async Task<ResultMessageEntity> Put(string url, string putData)
{
if (!GetTokenState())
{
Debug.LogError("用户未登录,请先登录");
return new ResultMessageEntity()
{
code = 2001,
message = "用户未登录,请先登录"
};
}
try
{
// 修复URL拼接
using UnityWebRequest webRequest = new UnityWebRequest(url, UnityWebRequest.kHttpVerbPUT);
// 设置上传处理器
byte[] putBytes = System.Text.Encoding.UTF8.GetBytes(putData);
webRequest.uploadHandler = new UploadHandlerRaw(putBytes);
webRequest.downloadHandler = new DownloadHandlerBuffer();
// 设置请求头
webRequest.SetRequestHeader("Content-Type", "application/json");
if (authorization != null)
webRequest.SetRequestHeader("Authorization", authorization); // 修正请求头名称规范
webRequest.timeout = 20;
await webRequest.SendWebRequest();
// 增强错误处理
if (webRequest.result != UnityWebRequest.Result.Success)
{
var errorMsg = $"HTTP {webRequest.responseCode}\n" +
$"URL: {url}\n" +
$"Error: {webRequest.error}\n" +
$"Response: {webRequest.downloadHandler.text}";
Debug.LogError(errorMsg);
return new ResultMessageEntity()
{
code = 5001,
message = errorMsg
};
}
// 处理空响应
string responseText = webRequest.downloadHandler.text;
if (string.IsNullOrEmpty(responseText))
{
return new ResultMessageEntity()
{
code = 200,
message = "更新成功"
};
}
ResultMessageEntity resultMessageEntity =
JsonConvert.DeserializeObject<ResultMessageEntity>(webRequest.downloadHandler.text);
if (resultMessageEntity.code != 200)
{
Debug.LogError(resultMessageEntity.message);
}
return resultMessageEntity;
}
catch (Exception e)
{
Debug.LogError($"UnityEvo:WebRequestSystem.Put" + e.Message);
return new ResultMessageEntity()
{
code = 5001,
message = e.Message
};
}
}
public static bool GetTokenState()
{
if (string.IsNullOrEmpty(authorization))