之前在章节中有提到利用Form表单进行Post请求,但这种方式比较适合字段较少的情况,本章介绍Post请求传入Json用法,现在很多项目与后台接口对接,基本都是使用Json来进行通信。
直接上代码:
using System;
using LitJson;
using System.Text;
using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
using System.Collections.Generic;
public class Test : MonoBehaviour
{
/// <summary>
/// 登录验证信息
/// </summary>
public class LoginInfo
{
public string userName;
public string password;
public LoginInfo(string userName, string password)
{
this.userName = userName;
this.password = password;
}
}
private void Start()
{
LoginInfo loginInfo = new LoginInfo("admin", "123456");
string jsonStr = JsonMapper.ToJson(loginInfo);
StartCoroutine(UnityWebRequestPost("http://192.168.0.1:8080/port/login", jsonStr, text =>
{
Debug.Log("请求结果:" + text);
}));
}
/// <summary>
/// UnityWebRequest Post Json请求
/// </summary>
/// <param name="url">接口地址</param>
/// <param name="jsonStr">json参数</param>
/// <param name="textCallBack">text回调</param>
/// <returns></returns>
IEnumerator UnityWebRequestPost(string url, string jsonStr,Action<string> textCallBack)
{
byte[] bytes = Encoding.UTF8.GetBytes(jsonStr);
UnityWebRequest request = new UnityWebRequest(url, UnityWebRequest.kHttpVerbPOST)
{
uploadHandler = new UploadHandlerRaw(bytes),
downloadHandler = new DownloadHandlerBuffer()
};
request.SetRequestHeader("Content-Type", "application/json;charset=utf-8");
yield return request.SendWebRequest();
if (request.isHttpError || request.isNetworkError)
{
Debug.LogError(request.error);
}
else
{
string result = request.downloadHandler.text;
Debug.Log(result);
}
}
}
比较简单,我们通过LitJSON来将C#类对象序列化为json字符串,传入即可。
具体怎么序列化和反序列化Json,直接传送门:Json数据解析