使用System.Net.Http命名空间下的的HttpCline类在编辑器环境下是能获取数据的,但是在打包出来的WebGL版里是获取不到数据的。
- 使用HttpCline获取的数据 在编辑器下有用,webGL没用。
此模块为编辑器有用,webGL版没用
/// <summary>
/// 创建实验 httpclient
/// </summary>
public void PostStart()
{
HttpClient httpClient = new HttpClient();
var postData = Newtonsoft.Json.JsonConvert.SerializeObject(new
{
SecretKey = "此模块为服务器对应SecretKey值", //服务器管理给。
}
);
HttpContent httpContent = new StringContent(postData);
httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
var result = httpClient.PostAsync("服务器IP" + "对应接口的URL", httpContent).Result;
if (result.IsSuccessStatusCode)
{
//获取过来的token,一套流程所需的一个验证身份 这边记录下来。
//Token_R类是对应的json解析的对象
WindowsManager.Instance.Token = JsonUtility.FromJson<Token_R>(result.Content.ReadAsStringAsync().Result).Data;
}
}
如果想要在Unity打包出来的WebGL中获取服务器数据的话,需要使用unity自带的UnityWebRequest类。
- 使用UnityWebRequest获取数据,在编辑器下或WebGL下都可以获取
/// <summary>
/// 创建实验
/// </summary>
public void StartLab()
{
StartCoroutine(Upload());
}
/// <summary>
/// 获取Token
/// </summary>
/// <returns></returns>
IEnumerator Upload()
{
var postData = JsonConvert.SerializeObject(new
{
SecretKey = "此模块为服务器对应SecretKey值",
}
);
byte[] body = Encoding.UTF8.GetBytes(postData);
UnityWebRequest request = new UnityWebRequest("服务器IP" + "对应接口URL", "Post");
request.uploadHandler = new UploadHandlerRaw(body);
request.SetRequestHeader("Content-Type", "application/json;charset=utf-8"); //这里根据服务器所需来设置
request.downloadHandler = new DownloadHandlerBuffer();
yield return request.SendWebRequest();
if (request.isDone)
{
string result = request.downloadHandler.text;
//这边需要jsonconver类的反序列化json来获取对应的数据。
Token = JsonConvert.DeserializeObject<Token_R>(result).Data;
//response(result);
}
else
{
Debug.Log("Http 请求失败");
Debug.Log(request.error);
}
}
[Serializable]
public class Token_R
{
public bool IsSuccess;
public string Message;
public string Data; //这个对应服务器接口的token数据
}
还有关于脚本中所使用的JsonConvert类是需要引用一个Newtonsoft.Json的程序集。这个程序集在unity的商店里可以下载,免费的。名字Json.net for unity 。导入这个插件不会使脚本报错。导入后的文件夹名字叫JsonDotNet。还有以上用的都是Post的方式。Get请求我用的是一个叫BestHttp的插件。大家可以百度下载使用。发布本篇博客是为了记录自己所遇到的坑,以后好用到。