1

Unity3D 게임 엔진에서 firefox 클라우드 기능 프로젝트에 POST Http 요청을하는 데 문제가 있습니다.UnityWebRequest Firebase 용 클라우드 기능에 대한 HTTP POST

나는 코드 400 응답을 받고 계속하고, 중포 기지 콘솔에서 나는 다음과 같은 오류 볼 수 있습니다 : 정말 HTTP를 요청에 대한 많은 지식이없는

Error: invalid json at parse

, 그리고 꽤 많은 시간 후 도움을 요청하고 싶은 해결책을 찾으려고 노력하고 있습니다.

public void RateLevel(string guid, int rating) 
{ 
    RateLevelRequest rlr = new RateLevelRequest (guid, rating.ToString()); 
    string body = rlr.ToJson(); 
    UnityWebRequest www = UnityWebRequest.Post("myurl", body); 
    www.SetRequestHeader ("Content-Type", "application/json"); 
    StartCoroutine (MakeRequest (www)); 
} 

/* * * * * * * * * * * * * * * * * * * 
* AUXILIAR CLASS FOR HTTP REQUESTS * 
* * * * * * * * * * * * * * * * * * */ 

[System.Serializable] 
public class RateLevelRequest 
{ 
    public string guid; 
    public string rating; 

    public RateLevelRequest(string _guid, string _rating) 
    { 
     guid = _guid; 
     rating = _rating; 
    } 

    public string ToJson() 
    { 
     string json = JsonUtility.ToJson (this); 
     Debug.Log ("RateLevelRequest Json: " + json); 
     return json; 
    } 
} 

는이 같은 값으로, json으로 잘 형성되어 있음을 보장 할 수 있습니다 : 여기

클라이언트 코드입니다.

{"guid":"fake-guid","rating":"-1"}

그리고 firebase-functions에서 현재 배포 된 기능은 다음과 같습니다.

exports.rate_level = functions.https.onRequest((req, res) => { 
    if(req.method === 'POST') 
    { 
     console.log('guid: ' + req.body.guid); 
     console.log('rating: ' + req.body.rating); 
     console.log('invented var: ' + req.body.myinvention); 

     if(req.body.guid && req.body.rating && 
     (req.body.rating == 1 || req.body.rating == -1)) 
     { 
      res.status(200).send('You are doing a post request with the right fields and values'); 
     } 
     else 
     { 
      res.status(403).send('Required Fields are not Defined!') 
     } 
    } 
    else 
    { 
     res.status(403).send('Wrong Request Method!'); 
    } 
}); 

누구든지 이것을 시도하고 성공 했습니까?

미리 감사드립니다.

답변

2

나는 대답을 excellent blog entry에서 발견했다.

나는 정말로 무엇이 잘못되었는지 알지 못하지만 대신 위에 언급 한 기사에서 언급 한 코드로 코드를 대체했습니다. 나는 당신이 나머지 문제를 가지고 게시 할 것입니다.

public void RateLevel(string guid, int rating) 
    { 
     RateLevelRequest rlr = new RateLevelRequest (guid, rating.ToString()); 
     string body = rlr.ToJson(); 
     byte[] bodyRaw = new System.Text.UTF8Encoding().GetBytes (body); 
     UnityWebRequest www = new UnityWebRequest("myurl", UnityWebRequest.kHttpVerbPOST); 
     www.uploadHandler = (UploadHandler)new UploadHandlerRaw (bodyRaw); 
     www.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer(); 
     www.SetRequestHeader ("Content-Type", "application/json"); 
     StartCoroutine (MakeRequest (www)); 
    } 

최고!