c# – UnityWebRequest.downloadHandler返回null,同时从Node Server获得响应

前端之家收集整理的这篇文章主要介绍了c# – UnityWebRequest.downloadHandler返回null,同时从Node Server获得响应前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在Unity上创建一个注册场景.在后端我有MongoDB的NodeJS服务器.注册成功,数据也保存在Mongo上.

这是我的NodeJS api用于注册

api.post('/register',(req,res) => {
Account.register(new Account({username: req.body.username}),req.body.password,function(err,account){
  console.log("acc: "+account);
  if(err){
    if (err.name == "UserExistsError") {
      console.log("User Exists");
      return res.status(409).send(err);
    }else {
      console.log("User Error 500");
      return res.status(500).send(err);
    }
  }else {
    let newUser = new User();
    newUser.accountid = account._id;
    newUser.name = req.body.fullname;
    newUser.gender = req.body.gender;
    newUser.role = req.body.role;
    newUser.country = req.body.country;
    newUser.coins = req.body.coins;
    newUser.save(err => {
      if(err){
        console.log(err);
        return res.send(err);
      }else{
        console.log('user saved');
        res.json({ message: 'User saved' });
      }
    });
    passport.authenticate(
      'local',{
        session: false
      })(req,res,() => {
         res.json({ registermsg: 'Successfully created new account'});
      });
  }
});
});

这是我在Unity C中的POST协同程序#

IEnumerator Post(string b) {

    byte[] bytes = System.Text.Encoding.ASCII.GetBytes(b);

    using (UnityWebRequest www = new UnityWebRequest(BASE_URL,UnityWebRequest.kHttpVerbPOST)) {
        UploadHandlerRaw uH = new UploadHandlerRaw(bytes);
        www.uploadHandler = uH;
        www.SetRequestHeader("Content-Type","application/json");
        yield return www.Send();

        if (www.isError) {
            Debug.Log(www.error);
        } else {
            lbltext.text = "User Registered";
            Debug.Log(www.ToString());
            Debug.Log(www.downloadHandler.text);
        }
    }
}

我正在尝试Debug.Log(www.downloadHandler.text);但是我得到了NullReferenceException.

我想问一下,我正在使用的方式在我的api中返回响应是否正确?如果是,我如何在Unity端使用该响应.

解决方法

UnityWebRequest.Post,UnityWebRequest.Get和其他创建UnityWebRequest新实例的UnityWebRequest functions自动附加DownloadHandlerBuffer.

现在,如果使用UnityWebRequest构造函数创建UnityWebRequest的新实例,则DownloadHandler不会附加到该新实例.您必须使用DownloadHandlerBuffer手动执行此操作.

IEnumerator Post(string b)
{

    byte[] bytes = System.Text.Encoding.ASCII.GetBytes(b);

    using (UnityWebRequest www = new UnityWebRequest(BASE_URL,UnityWebRequest.kHttpVerbPOST))
    {
        UploadHandlerRaw uH = new UploadHandlerRaw(bytes);
        DownloadHandlerBuffer dH = new DownloadHandlerBuffer();

        www.uploadHandler = uH;
        www.downloadHandler = dH;
        www.SetRequestHeader("Content-Type","application/json");
        yield return www.Send();

        if (www.isError)
        {
            Debug.Log(www.error);
        }
        else
        {
            lbltext.text = "User Registered";
            Debug.Log(www.ToString());
            Debug.Log(www.downloadHandler.text);
        }
    }
}

猜你在找的C#相关文章