// 定义回调函数
delegate void SendRequestCallback(JObject returnData);
/// <summary>
/// 本方法将以Json格式向后端发送请求
/// </summary>
/// <param name="originJson">要发送的Json对象</param>
/// <param name="url"></param>
/// <param name="call">回调函数,不会处理异常,将信息原样返回</param>
/// <param name="type">可以是"POST"、"GET"等</param>
IEnumerator SendRequest(JObject originJson, string url, SendRequestCallback callback, string type)
{
// 将JObject转成json字符串
string sendData = JsonConvert.SerializeObject(originJson);
// 将字符串使用UTF-8编码成字节流
byte[] postBytes = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(sendData);
// 创建UnityWebRequest对象,用以发送请求。使用type指定请求的类型。
using (UnityWebRequest webRequest = new UnityWebRequest(url, type))
{
// 设置要上传的数据
webRequest.uploadHandler = (UploadHandler)new UploadHandlerRaw(postBytes);
// 创建后端返回数据的接收端
webRequest.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();
// 添加请求头。token是我们项目特有的
webRequest.SetRequestHeader("xxx", xxx);
// 必须要添加Content-Type请求头,明确指定以json形式传输
webRequest.SetRequestHeader("Content-Type", "application/json");
// 发送请求,并等待后端返回后继续调用。
yield return webRequest.SendWebRequest();
// 当后端炸了,可能返回一个空字符串,对空字符串进行json解析会导致错误
if (string.IsNullOrEmpty(webRequest.downloadHandler.text))
{
callback(null);
} else
{
// 将后端返回的json字符串转换成一个JObject对象,使用callback传递。
JObject returnData = JObject.Parse(webRequest.downloadHandler.text);
callback(returnData);
}
}
}