Unit打包WebGL---关于网络获取数据的问题

2 篇文章 0 订阅

使用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的插件。大家可以百度下载使用。发布本篇博客是为了记录自己所遇到的坑,以后好用到。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值