2025-03-31 11:16:52 +08:00
|
|
|
|
using System;
|
|
|
|
|
|
using System.Collections.Generic;
|
2025-05-30 14:50:46 +08:00
|
|
|
|
using System.IO;
|
2025-03-31 14:55:24 +08:00
|
|
|
|
using System.Threading.Tasks;
|
2025-04-11 09:56:06 +08:00
|
|
|
|
using Cysharp.Threading.Tasks;
|
2025-05-30 14:50:46 +08:00
|
|
|
|
using Newtonsoft.Json;
|
2025-09-23 11:18:38 +08:00
|
|
|
|
using UnityEditor;
|
2025-03-31 11:16:52 +08:00
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
using UnityEngine.Networking;
|
|
|
|
|
|
|
|
|
|
|
|
namespace Stary.Evo
|
|
|
|
|
|
{
|
2025-09-24 14:28:10 +08:00
|
|
|
|
|
|
|
|
|
|
|
2025-05-30 14:50:46 +08:00
|
|
|
|
public static class WebRequestSystem
|
2025-03-31 11:16:52 +08:00
|
|
|
|
{
|
2025-05-30 14:50:46 +08:00
|
|
|
|
private static string authorization;
|
|
|
|
|
|
|
2025-09-23 11:18:38 +08:00
|
|
|
|
static WebRequestSystem()
|
|
|
|
|
|
{
|
2025-09-24 15:58:54 +08:00
|
|
|
|
#if UNITY_EDITOR
|
2025-09-23 11:18:38 +08:00
|
|
|
|
authorization = EditorPrefs.GetString("Authorization");
|
2025-09-24 15:58:54 +08:00
|
|
|
|
#else
|
2026-01-07 18:20:13 +08:00
|
|
|
|
authorization = CustomPlayerPrefs.GetString("Authorization");
|
2025-09-24 15:58:54 +08:00
|
|
|
|
#endif
|
|
|
|
|
|
|
2025-09-23 11:18:38 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-05-30 14:50:46 +08:00
|
|
|
|
public static async Task<bool> Login(string url, string username, string password)
|
|
|
|
|
|
{
|
|
|
|
|
|
var data = new
|
|
|
|
|
|
{
|
|
|
|
|
|
username = username,
|
|
|
|
|
|
password = password,
|
|
|
|
|
|
roleType = "client",
|
|
|
|
|
|
};
|
|
|
|
|
|
string postData = JsonConvert.SerializeObject(data);
|
2025-06-12 14:20:37 +08:00
|
|
|
|
try
|
2025-05-30 14:50:46 +08:00
|
|
|
|
{
|
2025-09-24 14:28:10 +08:00
|
|
|
|
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;
|
|
|
|
|
|
}
|
2025-08-13 17:54:09 +08:00
|
|
|
|
|
2025-05-30 14:50:46 +08:00
|
|
|
|
byte[] postBytes = System.Text.Encoding.UTF8.GetBytes(postData);
|
|
|
|
|
|
webRequest.uploadHandler = new UploadHandlerRaw(postBytes);
|
|
|
|
|
|
webRequest.SetRequestHeader("Content-Type", "application/json");
|
2025-06-12 14:20:37 +08:00
|
|
|
|
webRequest.timeout = 10;
|
2025-05-30 14:50:46 +08:00
|
|
|
|
await webRequest.SendWebRequest();
|
|
|
|
|
|
webRequest.uploadHandler?.Dispose();
|
|
|
|
|
|
// 更新错误检查方式
|
|
|
|
|
|
if (webRequest.result == UnityWebRequest.Result.ConnectionError ||
|
|
|
|
|
|
webRequest.result == UnityWebRequest.Result.ProtocolError)
|
|
|
|
|
|
{
|
|
|
|
|
|
Debug.LogError(webRequest.error);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
ResultMessageEntity authResponse =
|
|
|
|
|
|
JsonConvert.DeserializeObject<ResultMessageEntity>(webRequest.downloadHandler.text);
|
2025-06-12 14:20:37 +08:00
|
|
|
|
Debug.Log("UnityEvo:ResultMessageEntity" + authResponse.data);
|
2025-05-30 14:50:46 +08:00
|
|
|
|
if (authResponse.code == 200)
|
|
|
|
|
|
{
|
|
|
|
|
|
AuthenticationResponse authResponseData =
|
|
|
|
|
|
JsonConvert.DeserializeObject<AuthenticationResponse>(authResponse.data.ToString());
|
2025-06-12 14:20:37 +08:00
|
|
|
|
Debug.Log("UnityEvo:AuthenticationResponse" + authResponseData.Token);
|
2025-05-30 14:50:46 +08:00
|
|
|
|
authorization = authResponseData.Token;
|
2025-09-24 15:58:54 +08:00
|
|
|
|
#if UNITY_EDITOR
|
2025-09-23 11:18:38 +08:00
|
|
|
|
EditorPrefs.SetString("Authorization", authorization);
|
2025-09-24 15:58:54 +08:00
|
|
|
|
#else
|
2026-01-07 18:20:13 +08:00
|
|
|
|
CustomPlayerPrefs.SetString("Authorization",authorization);
|
2025-09-24 15:58:54 +08:00
|
|
|
|
#endif
|
|
|
|
|
|
|
2025-06-12 14:20:37 +08:00
|
|
|
|
Debug.Log("UnityEvo:登录成功");
|
2025-05-30 14:50:46 +08:00
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
2025-06-12 14:20:37 +08:00
|
|
|
|
catch (Exception e)
|
|
|
|
|
|
{
|
|
|
|
|
|
Debug.LogError($"UnityEvo:WebRequestSystem.Login" + e.Message);
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
2025-05-30 14:50:46 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// GET请求数据
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="url">请求数据的URL地址</param>
|
|
|
|
|
|
/// <param name="token">token验证的参数,此处为authorization</param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public static async Task<bool> GetValidateToken(string url)
|
|
|
|
|
|
{
|
2025-09-24 15:58:54 +08:00
|
|
|
|
#if UNITY_EDITOR
|
2025-09-23 11:18:38 +08:00
|
|
|
|
authorization = EditorPrefs.GetString("Authorization");
|
2025-09-24 15:58:54 +08:00
|
|
|
|
#else
|
2026-01-07 18:20:13 +08:00
|
|
|
|
authorization = CustomPlayerPrefs.GetString("Authorization");
|
2025-09-24 15:58:54 +08:00
|
|
|
|
#endif
|
2025-05-30 14:50:46 +08:00
|
|
|
|
try
|
|
|
|
|
|
{
|
2025-09-24 14:28:10 +08:00
|
|
|
|
|
|
|
|
|
|
using UnityWebRequest webRequest =
|
2025-10-31 11:18:23 +08:00
|
|
|
|
new UnityWebRequest($"{url}/{authorization}", UnityWebRequest.kHttpVerbGET);
|
2025-09-24 14:28:10 +08:00
|
|
|
|
//using UnityWebRequest webRequest = UnityWebRequest.Get($"{url}?token={authorization}");
|
2025-06-12 14:20:37 +08:00
|
|
|
|
webRequest.downloadHandler = new DownloadHandlerBuffer();
|
|
|
|
|
|
webRequest.timeout = 10;
|
|
|
|
|
|
await webRequest.SendWebRequest();
|
|
|
|
|
|
// 增强错误处理
|
|
|
|
|
|
if (webRequest.result != UnityWebRequest.Result.Success)
|
2025-05-30 14:50:46 +08:00
|
|
|
|
{
|
2025-06-12 14:20:37 +08:00
|
|
|
|
var errorMsg = $"HTTP {webRequest.responseCode}\n" +
|
|
|
|
|
|
$"URL: {url}\n" +
|
|
|
|
|
|
$"Error: {webRequest.error}\n" +
|
|
|
|
|
|
$"Response: {webRequest.downloadHandler.text}";
|
2025-05-30 14:50:46 +08:00
|
|
|
|
|
2025-06-12 14:20:37 +08:00
|
|
|
|
Debug.LogError(errorMsg);
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
2025-05-30 14:50:46 +08:00
|
|
|
|
|
2025-06-12 14:20:37 +08:00
|
|
|
|
ResultMessageEntity resultMessageEntity =
|
|
|
|
|
|
JsonConvert.DeserializeObject<ResultMessageEntity>(webRequest.downloadHandler.text);
|
|
|
|
|
|
if (resultMessageEntity.code == 200)
|
|
|
|
|
|
return true; // 添加返回值
|
2025-05-30 14:50:46 +08:00
|
|
|
|
|
|
|
|
|
|
|
2025-06-12 14:20:37 +08:00
|
|
|
|
return false;
|
2025-05-30 14:50:46 +08:00
|
|
|
|
}
|
|
|
|
|
|
catch (Exception e)
|
|
|
|
|
|
{
|
2025-06-12 14:20:37 +08:00
|
|
|
|
Debug.LogError($"UnityEvo:WebRequestSystem.GetValidateToken" + e.Message);
|
|
|
|
|
|
return false;
|
2025-05-30 14:50:46 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-03-31 11:16:52 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// POST请求数据
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="url">获取Token值的服务URL地址(很重要)</param>
|
|
|
|
|
|
/// <param name="postData">传入请求的参数,此处参数为JOSN格式</param>
|
|
|
|
|
|
/// <returns></returns>
|
2025-09-29 18:24:13 +08:00
|
|
|
|
public static async Task<ResultMessageEntity> PostFile(string url, string[] path,Action<float> uploadProgress = null)
|
2025-03-31 11:16:52 +08:00
|
|
|
|
{
|
2025-05-30 14:50:46 +08:00
|
|
|
|
if (!GetTokenState())
|
2025-03-31 11:16:52 +08:00
|
|
|
|
{
|
2025-05-30 14:50:46 +08:00
|
|
|
|
Debug.LogError("用户未登录,请先登录");
|
|
|
|
|
|
return new ResultMessageEntity()
|
|
|
|
|
|
{
|
|
|
|
|
|
code = 2001,
|
|
|
|
|
|
message = "用户未登录,请先登录"
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
2025-06-12 14:20:37 +08:00
|
|
|
|
|
2025-05-30 14:50:46 +08:00
|
|
|
|
//UnityWebRequest[] files = new UnityWebRequest[3];
|
|
|
|
|
|
WWWForm form = new WWWForm();
|
2025-03-31 11:16:52 +08:00
|
|
|
|
|
2025-05-30 14:50:46 +08:00
|
|
|
|
for (int i = 0; i < path.Length; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
byte[] bytes = await File.ReadAllBytesAsync(path[i]);
|
|
|
|
|
|
form.AddBinaryData("files[]", bytes, Path.GetFileName(path[i]));
|
|
|
|
|
|
}
|
2025-06-12 14:20:37 +08:00
|
|
|
|
|
|
|
|
|
|
try
|
2025-05-30 14:50:46 +08:00
|
|
|
|
{
|
2025-06-12 14:20:37 +08:00
|
|
|
|
using UnityWebRequest webRequest = UnityWebRequest.Post(url, form);
|
2025-09-24 14:28:10 +08:00
|
|
|
|
|
2025-05-30 14:50:46 +08:00
|
|
|
|
webRequest.SetRequestHeader("Authorization", authorization);
|
|
|
|
|
|
webRequest.disposeUploadHandlerOnDispose = true;
|
|
|
|
|
|
webRequest.disposeDownloadHandlerOnDispose = true;
|
|
|
|
|
|
webRequest.disposeCertificateHandlerOnDispose = true;
|
2025-06-12 14:20:37 +08:00
|
|
|
|
webRequest.timeout = 60;
|
2025-09-29 18:24:13 +08:00
|
|
|
|
|
|
|
|
|
|
// 发送请求但不等待完成
|
|
|
|
|
|
var operation = webRequest.SendWebRequest();
|
|
|
|
|
|
// 轮询获取上传进度
|
|
|
|
|
|
while (!operation.isDone)
|
|
|
|
|
|
{
|
|
|
|
|
|
// 调用进度回调函数
|
|
|
|
|
|
uploadProgress?.Invoke(webRequest.uploadProgress);
|
|
|
|
|
|
// 等待一帧,避免阻塞
|
|
|
|
|
|
await UniTask.Yield();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-05-30 14:50:46 +08:00
|
|
|
|
webRequest.uploadHandler?.Dispose();
|
2025-03-31 11:16:52 +08:00
|
|
|
|
// 更新错误检查方式
|
|
|
|
|
|
if (webRequest.result == UnityWebRequest.Result.ConnectionError ||
|
|
|
|
|
|
webRequest.result == UnityWebRequest.Result.ProtocolError)
|
|
|
|
|
|
{
|
|
|
|
|
|
Debug.LogError(webRequest.error);
|
2025-05-30 14:50:46 +08:00
|
|
|
|
return new ResultMessageEntity()
|
|
|
|
|
|
{
|
|
|
|
|
|
code = 5001,
|
|
|
|
|
|
message = webRequest.error
|
|
|
|
|
|
};
|
2025-03-31 11:16:52 +08:00
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
2025-05-30 14:50:46 +08:00
|
|
|
|
ResultMessageEntity resultMessageEntity =
|
|
|
|
|
|
JsonConvert.DeserializeObject<ResultMessageEntity>(webRequest.downloadHandler.text);
|
|
|
|
|
|
if (resultMessageEntity.code != 200)
|
|
|
|
|
|
{
|
|
|
|
|
|
Debug.LogError("上传异常,无文件数据返回!!");
|
|
|
|
|
|
}
|
2025-06-12 14:20:37 +08:00
|
|
|
|
|
2025-05-30 14:50:46 +08:00
|
|
|
|
return resultMessageEntity;
|
2025-03-31 11:16:52 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-06-12 14:20:37 +08:00
|
|
|
|
catch (Exception e)
|
|
|
|
|
|
{
|
|
|
|
|
|
Debug.LogError($"UnityEvo:WebRequestSystem.PostFile" + e.Message);
|
|
|
|
|
|
return new ResultMessageEntity()
|
|
|
|
|
|
{
|
|
|
|
|
|
code = 5001,
|
|
|
|
|
|
message = e.Message
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
2025-03-31 11:16:52 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-06-12 14:20:37 +08:00
|
|
|
|
/// <summary>
|
2025-03-31 11:16:52 +08:00
|
|
|
|
/// GET请求数据
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="url">请求数据的URL地址</param>
|
|
|
|
|
|
/// <param name="token">token验证的参数,此处为authorization</param>
|
|
|
|
|
|
/// <returns></returns>
|
2025-06-12 14:20:37 +08:00
|
|
|
|
public static async Task<ResultMessageEntity> GetFile(string url, string tempPath,
|
|
|
|
|
|
Action<float> downloadProgress = null)
|
2025-03-31 11:16:52 +08:00
|
|
|
|
{
|
2025-05-30 14:50:46 +08:00
|
|
|
|
if (!GetTokenState())
|
|
|
|
|
|
{
|
|
|
|
|
|
Debug.LogError("用户未登录,请先登录");
|
|
|
|
|
|
return new ResultMessageEntity()
|
|
|
|
|
|
{
|
|
|
|
|
|
code = 2001,
|
|
|
|
|
|
message = "用户未登录,请先登录"
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-03-31 11:16:52 +08:00
|
|
|
|
try
|
|
|
|
|
|
{
|
2025-06-12 14:20:37 +08:00
|
|
|
|
using UnityWebRequest webRequest = UnityWebRequest.Get(url);
|
|
|
|
|
|
webRequest.downloadHandler = new DownloadHandlerFile(tempPath);
|
|
|
|
|
|
if (authorization != null)
|
|
|
|
|
|
webRequest.SetRequestHeader("Authorization", authorization); // 修正请求头名称规范
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var operation = webRequest.SendWebRequest();
|
|
|
|
|
|
while (!operation.isDone)
|
2025-05-30 14:50:46 +08:00
|
|
|
|
{
|
2025-06-12 14:20:37 +08:00
|
|
|
|
downloadProgress?.Invoke(webRequest.downloadProgress);
|
|
|
|
|
|
await UniTask.Yield();
|
|
|
|
|
|
}
|
2025-05-30 14:50:46 +08:00
|
|
|
|
|
2025-06-12 14:20:37 +08:00
|
|
|
|
// 增强错误处理
|
|
|
|
|
|
if (webRequest.result != UnityWebRequest.Result.Success)
|
|
|
|
|
|
{
|
|
|
|
|
|
var errorMsg = $"HTTP {webRequest.responseCode}\n" +
|
|
|
|
|
|
$"URL: {url}\n" +
|
|
|
|
|
|
$"Error: {webRequest.error}\n";
|
|
|
|
|
|
|
|
|
|
|
|
Debug.LogError(errorMsg);
|
|
|
|
|
|
return new ResultMessageEntity()
|
2025-05-30 14:50:46 +08:00
|
|
|
|
{
|
2025-06-12 14:20:37 +08:00
|
|
|
|
code = 5001,
|
|
|
|
|
|
message = errorMsg
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
return new ResultMessageEntity()
|
|
|
|
|
|
{
|
|
|
|
|
|
code = 200,
|
|
|
|
|
|
message = "下载成功"
|
|
|
|
|
|
};
|
2025-05-30 14:50:46 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Exception e)
|
|
|
|
|
|
{
|
2025-06-12 14:20:37 +08:00
|
|
|
|
Debug.LogError($"UnityEvo:WebRequestSystem.GetFile" + e.Message);
|
|
|
|
|
|
|
2025-05-30 14:50:46 +08:00
|
|
|
|
return new ResultMessageEntity()
|
|
|
|
|
|
{
|
|
|
|
|
|
code = 5001,
|
|
|
|
|
|
message = e.Message
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-06-12 14:20:37 +08:00
|
|
|
|
|
2025-09-24 14:28:10 +08:00
|
|
|
|
/// <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
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-05-30 14:50:46 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// POST请求数据
|
2025-09-24 14:28:10 +08:00
|
|
|
|
/// 携带数据:是
|
|
|
|
|
|
/// 幂等性:否
|
2025-05-30 14:50:46 +08:00
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="url">获取Token值的服务URL地址(很重要)</param>
|
|
|
|
|
|
/// <param name="postData">传入请求的参数,此处参数为JOSN格式</param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public static async Task<ResultMessageEntity> Post(string url, string postData)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (!GetTokenState())
|
2025-03-31 11:16:52 +08:00
|
|
|
|
{
|
2025-05-30 14:50:46 +08:00
|
|
|
|
Debug.LogError("用户未登录,请先登录");
|
|
|
|
|
|
return new ResultMessageEntity()
|
|
|
|
|
|
{
|
|
|
|
|
|
code = 2001,
|
|
|
|
|
|
message = "用户未登录,请先登录"
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
2025-03-31 11:16:52 +08:00
|
|
|
|
|
2025-06-12 14:20:37 +08:00
|
|
|
|
try
|
2025-05-30 14:50:46 +08:00
|
|
|
|
{
|
2025-09-24 14:28:10 +08:00
|
|
|
|
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;
|
2025-10-31 11:18:23 +08:00
|
|
|
|
webRequest.timeout = 30;
|
2025-09-24 14:28:10 +08:00
|
|
|
|
await webRequest.SendWebRequest();
|
|
|
|
|
|
webRequest.uploadHandler?.Dispose();
|
|
|
|
|
|
// 更新错误检查方式
|
|
|
|
|
|
if (webRequest.result == UnityWebRequest.Result.ConnectionError ||
|
|
|
|
|
|
webRequest.result == UnityWebRequest.Result.ProtocolError)
|
2025-03-31 11:16:52 +08:00
|
|
|
|
{
|
2025-09-24 14:28:10 +08:00
|
|
|
|
Debug.LogError(webRequest.error);
|
|
|
|
|
|
return new ResultMessageEntity()
|
2025-05-30 14:50:46 +08:00
|
|
|
|
{
|
2025-09-24 14:28:10 +08:00
|
|
|
|
code = 5001,
|
|
|
|
|
|
message = webRequest.error
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
ResultMessageEntity resultMessageEntity =
|
|
|
|
|
|
JsonConvert.DeserializeObject<ResultMessageEntity>(webRequest.downloadHandler.text);
|
|
|
|
|
|
if (resultMessageEntity.code != 200)
|
2025-05-30 14:50:46 +08:00
|
|
|
|
{
|
2025-09-24 14:28:10 +08:00
|
|
|
|
Debug.LogError(resultMessageEntity.message);
|
2025-05-30 14:50:46 +08:00
|
|
|
|
}
|
2025-09-24 14:28:10 +08:00
|
|
|
|
|
|
|
|
|
|
return resultMessageEntity;
|
2025-03-31 11:16:52 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-06-12 14:20:37 +08:00
|
|
|
|
catch (Exception e)
|
|
|
|
|
|
{
|
|
|
|
|
|
Debug.LogError($"UnityEvo:WebRequestSystem.Post" + e.Message);
|
|
|
|
|
|
|
|
|
|
|
|
return new ResultMessageEntity()
|
|
|
|
|
|
{
|
|
|
|
|
|
code = 5001,
|
|
|
|
|
|
message = e.Message
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
2025-05-30 14:50:46 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-09-24 14:28:10 +08:00
|
|
|
|
|
2025-05-30 14:50:46 +08:00
|
|
|
|
/// <summary>
|
2025-09-24 14:28:10 +08:00
|
|
|
|
/// Delete请求数据
|
|
|
|
|
|
/// 携带数据:否
|
|
|
|
|
|
/// 幂等性:是
|
2025-05-30 14:50:46 +08:00
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="url">请求数据的URL地址</param>
|
2025-09-23 18:28:06 +08:00
|
|
|
|
/// <param name="path">请求数据的路径</param>
|
2025-05-30 14:50:46 +08:00
|
|
|
|
/// <returns></returns>
|
2025-09-24 14:28:10 +08:00
|
|
|
|
public static async Task<ResultMessageEntity> Delete(string url, string path)
|
2025-05-30 14:50:46 +08:00
|
|
|
|
{
|
|
|
|
|
|
if (!GetTokenState())
|
|
|
|
|
|
{
|
|
|
|
|
|
Debug.LogError("用户未登录,请先登录");
|
|
|
|
|
|
return new ResultMessageEntity()
|
|
|
|
|
|
{
|
|
|
|
|
|
code = 2001,
|
|
|
|
|
|
message = "用户未登录,请先登录"
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
2025-09-24 14:28:10 +08:00
|
|
|
|
// 修复URL拼接
|
2025-09-23 18:28:06 +08:00
|
|
|
|
string fullUrl = url.TrimEnd('/') + "/" + path.TrimStart('/');
|
2025-09-24 14:28:10 +08:00
|
|
|
|
using UnityWebRequest webRequest = new UnityWebRequest(fullUrl, UnityWebRequest.kHttpVerbDELETE);
|
2025-06-12 14:20:37 +08:00
|
|
|
|
webRequest.downloadHandler = new DownloadHandlerBuffer();
|
|
|
|
|
|
if (authorization != null)
|
|
|
|
|
|
webRequest.SetRequestHeader("Authorization", authorization); // 修正请求头名称规范
|
2025-05-30 14:50:46 +08:00
|
|
|
|
|
2025-06-12 14:20:37 +08:00
|
|
|
|
webRequest.timeout = 20;
|
|
|
|
|
|
await webRequest.SendWebRequest();
|
2025-05-30 14:50:46 +08:00
|
|
|
|
|
2025-06-12 14:20:37 +08:00
|
|
|
|
// 增强错误处理
|
|
|
|
|
|
if (webRequest.result != UnityWebRequest.Result.Success)
|
|
|
|
|
|
{
|
|
|
|
|
|
var errorMsg = $"HTTP {webRequest.responseCode}\n" +
|
|
|
|
|
|
$"URL: {url}\n" +
|
|
|
|
|
|
$"Error: {webRequest.error}\n" +
|
|
|
|
|
|
$"Response: {webRequest.downloadHandler.text}";
|
2025-05-30 14:50:46 +08:00
|
|
|
|
|
2025-06-12 14:20:37 +08:00
|
|
|
|
Debug.LogError(errorMsg);
|
|
|
|
|
|
return new ResultMessageEntity()
|
2025-05-30 14:50:46 +08:00
|
|
|
|
{
|
2025-06-12 14:20:37 +08:00
|
|
|
|
code = 5001,
|
|
|
|
|
|
message = errorMsg
|
|
|
|
|
|
};
|
2025-05-30 14:50:46 +08:00
|
|
|
|
}
|
2025-06-12 14:20:37 +08:00
|
|
|
|
|
2025-09-24 14:28:10 +08:00
|
|
|
|
// 修复空响应处理
|
|
|
|
|
|
string responseText = webRequest.downloadHandler.text;
|
|
|
|
|
|
if (string.IsNullOrEmpty(responseText))
|
|
|
|
|
|
{
|
|
|
|
|
|
return new ResultMessageEntity()
|
|
|
|
|
|
{
|
|
|
|
|
|
code = 200,
|
|
|
|
|
|
message = "删除成功"
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-06-12 14:20:37 +08:00
|
|
|
|
ResultMessageEntity resultMessageEntity =
|
|
|
|
|
|
JsonConvert.DeserializeObject<ResultMessageEntity>(webRequest.downloadHandler.text);
|
|
|
|
|
|
if (resultMessageEntity.code != 200)
|
|
|
|
|
|
{
|
|
|
|
|
|
Debug.LogError(resultMessageEntity.message);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return resultMessageEntity;
|
2025-03-31 11:16:52 +08:00
|
|
|
|
}
|
|
|
|
|
|
catch (Exception e)
|
|
|
|
|
|
{
|
2025-06-12 14:20:37 +08:00
|
|
|
|
Debug.LogError($"UnityEvo:WebRequestSystem.Get" + e.Message);
|
2025-05-30 14:50:46 +08:00
|
|
|
|
return new ResultMessageEntity()
|
|
|
|
|
|
{
|
|
|
|
|
|
code = 5001,
|
|
|
|
|
|
message = e.Message
|
|
|
|
|
|
};
|
2025-03-31 11:16:52 +08:00
|
|
|
|
}
|
2025-05-30 14:50:46 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-09-23 18:28:06 +08:00
|
|
|
|
/// <summary>
|
2025-09-24 14:28:10 +08:00
|
|
|
|
/// PUT请求数据
|
|
|
|
|
|
/// 携带数据:是
|
|
|
|
|
|
/// 幂等性:是
|
2025-09-23 18:28:06 +08:00
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="url">请求数据的URL地址</param>
|
|
|
|
|
|
/// <param name="path">请求数据的路径</param>
|
2025-09-24 14:28:10 +08:00
|
|
|
|
/// <param name="putData">要更新的数据(JSON格式)</param>
|
2025-09-23 18:28:06 +08:00
|
|
|
|
/// <returns></returns>
|
2025-09-24 14:28:10 +08:00
|
|
|
|
public static async Task<ResultMessageEntity> Put(string url, string putData)
|
2025-09-23 18:28:06 +08:00
|
|
|
|
{
|
|
|
|
|
|
if (!GetTokenState())
|
|
|
|
|
|
{
|
|
|
|
|
|
Debug.LogError("用户未登录,请先登录");
|
|
|
|
|
|
return new ResultMessageEntity()
|
|
|
|
|
|
{
|
|
|
|
|
|
code = 2001,
|
|
|
|
|
|
message = "用户未登录,请先登录"
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
// 修复URL拼接
|
2025-09-24 14:28:10 +08:00
|
|
|
|
|
|
|
|
|
|
using UnityWebRequest webRequest = new UnityWebRequest(url, UnityWebRequest.kHttpVerbPUT);
|
|
|
|
|
|
|
|
|
|
|
|
// 设置上传处理器
|
|
|
|
|
|
byte[] putBytes = System.Text.Encoding.UTF8.GetBytes(putData);
|
|
|
|
|
|
webRequest.uploadHandler = new UploadHandlerRaw(putBytes);
|
2025-09-23 18:28:06 +08:00
|
|
|
|
webRequest.downloadHandler = new DownloadHandlerBuffer();
|
2025-09-24 14:28:10 +08:00
|
|
|
|
|
|
|
|
|
|
// 设置请求头
|
|
|
|
|
|
webRequest.SetRequestHeader("Content-Type", "application/json");
|
2025-09-23 18:28:06 +08:00
|
|
|
|
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}";
|
2025-05-30 14:50:46 +08:00
|
|
|
|
|
2025-09-23 18:28:06 +08:00
|
|
|
|
Debug.LogError(errorMsg);
|
|
|
|
|
|
return new ResultMessageEntity()
|
|
|
|
|
|
{
|
|
|
|
|
|
code = 5001,
|
|
|
|
|
|
message = errorMsg
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
2025-09-24 14:28:10 +08:00
|
|
|
|
|
|
|
|
|
|
// 处理空响应
|
2025-09-23 18:28:06 +08:00
|
|
|
|
string responseText = webRequest.downloadHandler.text;
|
|
|
|
|
|
if (string.IsNullOrEmpty(responseText))
|
|
|
|
|
|
{
|
|
|
|
|
|
return new ResultMessageEntity()
|
|
|
|
|
|
{
|
|
|
|
|
|
code = 200,
|
2025-09-24 14:28:10 +08:00
|
|
|
|
message = "更新成功"
|
2025-09-23 18:28:06 +08:00
|
|
|
|
};
|
|
|
|
|
|
}
|
2025-09-24 14:28:10 +08:00
|
|
|
|
|
2025-09-23 18:28:06 +08:00
|
|
|
|
ResultMessageEntity resultMessageEntity =
|
|
|
|
|
|
JsonConvert.DeserializeObject<ResultMessageEntity>(webRequest.downloadHandler.text);
|
|
|
|
|
|
if (resultMessageEntity.code != 200)
|
|
|
|
|
|
{
|
|
|
|
|
|
Debug.LogError(resultMessageEntity.message);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return resultMessageEntity;
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Exception e)
|
|
|
|
|
|
{
|
2025-09-24 14:28:10 +08:00
|
|
|
|
Debug.LogError($"UnityEvo:WebRequestSystem.Put" + e.Message);
|
2025-09-23 18:28:06 +08:00
|
|
|
|
return new ResultMessageEntity()
|
|
|
|
|
|
{
|
|
|
|
|
|
code = 5001,
|
|
|
|
|
|
message = e.Message
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-09-24 14:28:10 +08:00
|
|
|
|
|
2025-05-30 14:50:46 +08:00
|
|
|
|
public static bool GetTokenState()
|
|
|
|
|
|
{
|
|
|
|
|
|
if (string.IsNullOrEmpty(authorization))
|
|
|
|
|
|
{
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return true;
|
2025-03-31 11:16:52 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|