自己封装的做Http网络请求的类,直接拷贝不能直接使用,因为有几处需要用到我自己封装的其他类,没传上来,需要自己修改一下在使用,稍微有点基础的人一看就能明白
工具类
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.Networking;
using VIP.Extension;
namespace VIP
{
public class VIPRequest : VIPMonoSingleton<VIPRequest>
{
/// <summary>
/// 根链接
/// </summary>
public string Api = "http://192.168.0.125:8068/api/";
/// <summary>
/// Token键
/// </summary>
private readonly string TokenKey = "token";
/// <summary>
/// Token值
/// </summary>
public static string Token;
/// <summary>
/// Get请求
/// </summary>
/// <param name="url"></param>
public void GetRequest(string url, UnityAction<VIPData> OnCallback, Dictionary<string, string> Header = null)
{
StartCoroutine(IeGetRequest(Api + url, OnCallback, Header));
}
/// <summary>
/// Get请求(携程)
/// </summary>
/// <param name="url"></param>
private IEnumerator IeGetRequest(string url, UnityAction<VIPData> OnCallback, Dictionary<string, string> Header)
{
UnityWebRequest webRequest = UnityWebRequest.Get(url);
if (Token.IsNotEmpty())
{
webRequest.SetRequestHeader(TokenKey, Token);
}
//添加头部内容
foreach (KeyValuePair<string, string> kvp in Header)
{
webRequest.SetRequestHeader(kvp.Key, kvp.Value);
}
yield return webRequest.SendWebRequest();
if (webRequest.isHttpError || webRequest.isNetworkError)
{
string text = webRequest.error;
ErrorHit(webRequest.responseCode);
}
else
{
string text = webRequest.downloadHandler.text;
VIPData vipData = VIPData.ToVIPData(text);
if (OnCallback.IsNotNull())
{
OnCallback(vipData);
}
}
}
/// <summary>
/// Post请求(后台使用@RequestParam接收,传字典,Content-Type类型为:application/x-www-form-urlencoded;charset=UTF-8)
/// </summary>
public void PostRequest(string url, UnityAction<VIPData> OnCallback, Dictionary<string, string> formFields = null, Dictionary<string, string> Header = null)
{
StartCoroutine(IePostRequest(Api + url, OnCallback, formFields, Header));
}
/// <summary>
/// Post请求(后台使用@RequestBody,传Json字符串,Content-Type类型为:application/json;charset=UTF-8)
/// </summary>
public void PostRequest(string url, UnityAction<VIPData> OnCallback, string formFields = null, Dictionary<string, string> Header = null)
{
StartCoroutine(IePostRequest(Api + url, OnCallback, formFields, Header));
}
/// <summary>
/// Post请求(携程)
/// </summary>
/// <param name="url"></param>
/// <param name="formFields"></param>
private IEnumerator IePostRequest(string url, UnityAction<VIPData> OnCallback, Dictionary<string, string> formFields, Dictionary<string, string> Header)
{
UnityWebRequest webRequest = UnityWebRequest.Post(url, formFields);
if (Token.IsNotEmpty())
{
webRequest.SetRequestHeader(TokenKey, Token);
}
//添加头部内容
foreach (KeyValuePair<string, string> kvp in Header)
{
webRequest.SetRequestHeader(kvp.Key, kvp.Value);
}
yield return webRequest.SendWebRequest();
if (webRequest.isHttpError || webRequest.isNetworkError)
{
string text = webRequest.error;
ErrorHit(webRequest.responseCode);
}
else
{
string text = webRequest.downloadHandler.text;
VIPData vipData = VIPData.ToVIPData(text);
if (OnCallback.IsNotNull())
{
OnCallback(vipData);
}
}
}
/// <summary>
/// Post请求(携程)
/// </summary>
/// <param name="url"></param>
/// <param name="formFields"></param>
private IEnumerator IePostRequest(string url, UnityAction<VIPData> OnCallback, string formFields, Dictionary<string, string> Header)
{
UnityWebRequest webRequest = UnityWebRequest.Post(url, formFields);
DownloadHandlerBuffer dhb = new DownloadHandlerBuffer();
byte[] body = Encoding.UTF8.GetBytes(formFields);
webRequest.uploadHandler = new UploadHandlerRaw(body);
webRequest.downloadHandler = dhb;
if (Token.IsNotEmpty())
{
webRequest.SetRequestHeader(TokenKey, Token);
}
//添加头部内容
foreach (KeyValuePair<string, string> kvp in Header)
{
webRequest.SetRequestHeader(kvp.Key, kvp.Value);
}
yield return webRequest.SendWebRequest();
if (webRequest.isHttpError || webRequest.isNetworkError)
{
string text = webRequest.error;
ErrorHit(webRequest.responseCode);
}
else
{
string text = webRequest.downloadHandler.text;
VIPData vipData = VIPData.ToVIPData(text);
if (OnCallback.IsNotNull())
{
OnCallback(vipData);
}
}
}
/// <summary>
/// Put请求
/// </summary>
/// <param name="url"></param>
/// <param name="bodyData"></param>
/// <param name="OnCallback"></param>
public void PutRequest(string url, UnityAction<VIPData> OnCallback, string bodyData = null, Dictionary<string, string> Header = null)
{
StartCoroutine(IePutRequest(Api + url, OnCallback, bodyData, Header));
}
/// <summary>
/// Put请求(携程)
/// </summary>
/// <param name="url"></param>
/// <param name="bodyData"></param>
/// <returns></returns>
public IEnumerator IePutRequest(string url, UnityAction<VIPData> OnCallback, string bodyData, Dictionary<string, string> Header)
{
UnityWebRequest webRequest = UnityWebRequest.Put(url, bodyData);
if (Token.IsNotEmpty())
{
webRequest.SetRequestHeader(TokenKey, Token);
}
//添加头部内容
foreach (KeyValuePair<string, string> kvp in Header)
{
webRequest.SetRequestHeader(kvp.Key, kvp.Value);
}
yield return webRequest.SendWebRequest();
if (webRequest.isHttpError || webRequest.isNetworkError)
{
string text = webRequest.error;
ErrorHit(webRequest.responseCode);
}
else
{
string text = webRequest.downloadHandler.text;
VIPData vipData = VIPData.ToVIPData(text);
if (OnCallback.IsNotNull())
{
OnCallback(vipData);
}
}
}
/// <summary>
/// Delete请求
/// </summary>
/// <param name="url"></param>
/// <param name="bodyData"></param>
/// <param name="OnCallback"></param>
public void DeleteRequest(string url, UnityAction<VIPData> OnCallback, Dictionary<string, string> Header = null)
{
StartCoroutine(IeDeleteRequest(Api + url, OnCallback, Header));
}
/// <summary>
/// Delete请求(携程)
/// </summary>
/// <returns></returns>
public IEnumerator IeDeleteRequest(string url, UnityAction<VIPData> OnCallback, Dictionary<string, string> Header)
{
UnityWebRequest webRequest = UnityWebRequest.Delete(url);
if (Token.IsNotEmpty())
{
webRequest.SetRequestHeader(TokenKey, Token);
}
//添加头部内容
foreach (KeyValuePair<string, string> kvp in Header)
{
webRequest.SetRequestHeader(kvp.Key, kvp.Value);
}
yield return webRequest.SendWebRequest();
if (webRequest.isHttpError || webRequest.isNetworkError)
{
string text = webRequest.error;
ErrorHit(webRequest.responseCode);
}
else
{
string text = webRequest.downloadHandler.text;
VIPData vipData = VIPData.ToVIPData(text);
if (OnCallback.IsNotNull())
{
OnCallback(vipData);
}
}
}
/// <summary>
/// 根据状态码提示错误
/// </summary>
/// <param name="responseCode"></param>
private void ErrorHit(long responseCode)
{
switch (responseCode)
{
case 0:
{
VIPToast.Instance.Show("请求超时");
}
break;
case 1001:
{
VIPToast.Instance.Show("未登陆");
}; break;
default:
{
VIPToast.Instance.Show("未知错误:" + responseCode);
}
break;
}
}
}
}
实体类
using LitJson;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class VIPData
{
/// <summary>
/// 状态码
/// </summary>
public int Code;
/// <summary>
/// 提示消息
/// </summary>
public string Msg;
/// <summary>
/// 数据
/// </summary>
public JsonData Data;
/// <summary>
/// string转VIPData
/// </summary>
/// <param name="text"></param>
/// <returns></returns>
public static VIPData ToVIPData(string text) {
JsonData jsonData = JsonMapper.ToObject(text);
int code = int.Parse(jsonData["code"].ToString());
string msg = jsonData["msg"].ToString();
JsonData data = jsonData["data"];
VIPData vipData = new VIPData
{
Code = code,
Msg = msg,
Data = data
};
return vipData;
}
}
新Get、Post(2023/07/07)
/// <summary>
/// Get请求
/// </summary>
/// <param name="url">地址</param>
/// <param name="Header">头</param>
/// <param name="callback">回调</param>
private void MakeGetRequest(string url, Dictionary<string, string> Header = null, UnityAction<UnityWebRequest> callback = null)
{
string final = baseUrl + url;
UnityEngine.Debug.Log("请求的地址:" + final);
UnityWebRequest webRequest = UnityWebRequest.Get(final);
DownloadHandlerBuffer dhb = new DownloadHandlerBuffer();
webRequest.downloadHandler = dhb;
webRequest.timeout = 60;
if (Token != null && Token != "")
{
webRequest.SetRequestHeader(TokenKey, Token);
}
if (Header != null)
{
//添加头部内容
foreach (KeyValuePair<string, string> kvp in Header)
{
webRequest.SetRequestHeader(kvp.Key, kvp.Value);
}
}
var operation = webRequest.SendWebRequest();
EditorApplication.update = () =>
{
if (operation.isDone)
{
if (callback != null)
{
callback(webRequest);
}
EditorApplication.update = null;
}
else
{
UnityEngine.Debug.Log("请求中...");
}
};
}
/// <summary>
/// Post请求
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="url">地址</param>
/// <param name="data">数据</param>
/// <param name="Header">头</param>
/// <param name="callback">回调</param>
private void MakePostRequest<T>(string url, T data, Dictionary<string, string> Header = null, UnityAction<UnityWebRequest> callback = null)
{
string final = baseUrl + url;
UnityEngine.Debug.Log("请求的地址:" + final);
string formFields = JsonConvert.SerializeObject(data);
UnityEngine.Debug.Log("请求数据:" + formFields);
UnityWebRequest webRequest = UnityWebRequest.Post(final, formFields);
byte[] body = Encoding.UTF8.GetBytes(formFields);
webRequest.uploadHandler = new UploadHandlerRaw(body);
DownloadHandlerBuffer dhb = new DownloadHandlerBuffer();
webRequest.downloadHandler = dhb;
webRequest.timeout = 60;
if (Token != null && Token != "")
{
webRequest.SetRequestHeader(TokenKey, Token);
}
if (Header != null)
{
//添加头部内容
foreach (KeyValuePair<string, string> kvp in Header)
{
webRequest.SetRequestHeader(kvp.Key, kvp.Value);
}
}
var operation = webRequest.SendWebRequest();
EditorApplication.update = () =>
{
if (operation.isDone)
{
if (callback != null)
{
callback(webRequest);
}
EditorApplication.update = null;
}
else
{
UnityEngine.Debug.Log("请求中...");
}
};
}
使用方法:
Get
Dictionary<string, string> Header = new Dictionary<string, string>();
Header.Add("Content-Type", "application/json;charset=UTF-8");
MakeGetRequest(url, Header, (webRequest) =>
{
if (webRequest.responseCode == 200) // 请求成功
{
UnityEngine.Debug.Log("请求成功: " + webRequest.downloadHandler.text);
}
else // 请求失败
{
UnityEngine.Debug.LogError("请求失败,错误码: " + webRequest.responseCode + ";错误信息:" + webRequest.error);
}
});
Post
LoginUser loginUser = new LoginUser();
loginUser.username = username;
loginUser.password = password;
Dictionary<string, string> Header = new Dictionary<string, string>();
Header.Add("Content-Type", "application/json;charset=UTF-8");
MakePostRequest<LoginUser>(loginUrl, loginUser, Header, (webRequest) => {
if (webRequest.responseCode == 200) // 请求成功
{
responseLogin = JsonConvert.DeserializeObject<ResponseLogin>(webRequest.downloadHandler.text);
}
else // 请求失败
{
UnityEngine.Debug.LogError("登录失败,错误码: " + webRequest.responseCode + ";错误信息:" + webRequest.error);
loginErrorHitInfo = "登录失败,错误码: " + webRequest.responseCode + ";错误信息:" + webRequest.error;
}
});