unity的网络请求有2种API,一个是www,一个是UnityWebRequest。
默认的数据传输格式是wwwform,这个在后台收到的格式是 Key=&Type=1&Id=23这种&分割的形式。因为涉及多个平台,大家传输的都是json,所以…
WWW
这个我试过了,www除了接受wwwform还接受byte[]的格式。就是下面这样:
string data;
public void GetData(int Type)
{
data = "{\"Key\":\"\",\"Type\":\"" + Type + "\",\"Id\":\"\"}";
StartCoroutine(SendRequest());
}
IEnumerator SendRequest()
{
WWW www = new WWW(url, System.Text.Encoding.UTF8.GetBytes(data));
yield return www;
if (Callback!= null)
{
Callback(this, www.text);
}
}
因为我们数据定义的格式是这样滴:
{
"Data" : [],
"ResultData" :
{
"Result" : 0
}
}
所以,解析就是这样咯:
JObject jo = (JObject)JsonConvert.DeserializeObject(result);
public List<Model> mv = new List<Model>(JsonConvert.DeserializeObject<Model[]>(jo["Data"].ToString()));
上面的model就是传回来的数据的类型类:
public class Model
{
public string Id { get; set; }
public string Name { get; set; }
public string Type{ get; set; }
}
UnityWebRequest
也可以传byte[]上去,不过要借助 uploadHandler 来实现,以下未被测试:
public void Request(object message,RequestCallback callback)
{
StartCoroutine(SendRequest(message, callback));
}
private IEnumerator SendRequest(object message,RequestCallback callback)
{
string msg = JsonConvert.SerializeObject(message);
byte[] data = Encoding.UTF8.GetBytes(msg);
UnityWebRequest request = new UnityWebRequest(uri, "POST");
request.uploadHandler = new UploadHandlerRaw(data);
request.SetRequestHeader("Content-Type", "application/json;charset=utf-8");
request.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();
yield return webClient.SendWebRequest();
if (webClient.isNetworkError)
{
Debug.Log("请求错误:"+ webClient.error);
} else{
string result = webClient.downloadHandler.text;
if(callback != null)
{
callback(this,result);
}
}
}