【问题标题】:Getting 400 (Bad Request) with my firebase URL使用我的 Firebase URL 获取 400(错误请求)
【发布时间】:2019-11-08 15:30:37
【问题描述】:

我遇到了一个问题,我正在尝试执行 PUT 请求以更新数据并将其存储到我的 firebase 数据库,但由于某种原因,当我运行我的代码并选择我的对象并单击下一步时,我收到错误将我的 Firebase 网络请求网址作为 400(错误请求)错误。有没有人如何解决这个问题。谢谢您的帮助。

PS:HIDDEN_URL 只是一个文本 - 出于安全目的,我隐藏了我的项目 url。谢谢!

-硬编码值有效:"{\"messages\":{\"message\":\"This is a test\"}}"; 但不是lastHighlightedObject.GetComponent<OBClick>().name;

这是我的代码:

    public void NextButton()
    {
        if (highlightSet == true)
        {
             var httpWebRequest =
                (HttpWebRequest) WebRequest.Create("https://HIDDEN_URL.firebaseio.com/brokenComp.json");
            httpWebRequest.ContentType = "application/json";
            httpWebRequest.Method = "PUT";


            using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
            {

                 string missingObjectCount = lastHighlightedObject.GetComponent<OBClick>().name;
                 streamWriter.Write(missingObjectCount);

            }

            var httpResponse = (HttpWebResponse) httpWebRequest.GetResponse();
            using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
            {
                var result = streamReader.ReadToEnd();
                Debug.Log(result);

            } 

            // When everything is Okay, it will load the scene. 
            SceneManager.LoadScene("Quiz");
        }

【问题讨论】:

  • 您考虑过使用 Firebase Unity SDK 吗?
  • 是的,我考虑过使用 firebase unity sdk。但首先我想检索名称以便我可以上传到 firebase
  • 在询问same question 之前,您可能应该先研究一下已有的。你还没有投票/接受任何答案..你解决了你的问题吗?
  • @GaryJackson 如果您使用 Firebase SDK,您可以使用单行代码从查询中检索 anme。
  • @ErikOverflow 正如我在最后一个问题中所展示的那样,这就是我要问的原因;)

标签: c# firebase unity3d


【解决方案1】:

该服务似乎需要某种 JSON 格式。由于您的核心版本有效

"{\"messages\":{\"message\":\"This is a test\"}}";

但不是一个 string 我猜你必须使用类似的东西

 string missingObjectCount = "{\"messages\":{\"message\":\"" + HighlightedObject.GetComponent<OBClick>().name + "\"}}"

your previous question中所述:

目前您的代码将冻结,直到请求完成。

我宁愿使用UnityWebRequest.Put 在请求完成之前不阻塞整个线程。

这只是 API 中的示例(稍作修改),但我想它非常简单,您应该可以将它用于您的目的

public class MyBehavior : MonoBehaviour 
{
    public void NextButton()
    {
        StartCoroutine(Upload());
    }

    IEnumerator Upload()
    {
        byte[] myData = System.Text.Encoding.UTF8.GetBytes("{\"messages\":{\"message\":\"" + HighlightedObject.GetComponent<OBClick>().name + "\"}}");
        using (UnityWebRequest www = UnityWebRequest.Put(YOUR_URL, myData))
        {
            yield return www.Send();

            if (www.isNetworkError || www.isHttpError)
            {
                Debug.Log(www.error);
            }
            else
            {
                Debug.Log("Upload complete!");
            }
        }
    }
}

顺便说一句,是什么阻碍了您使用Firebase SDK

应该是这样的

public class MyScript: MonoBehaviour 
{ 
    private void Start() 
    {
        // Set up the Editor before calling into the realtime database.
        FirebaseApp.DefaultInstance.SetEditorDatabaseUrl("https://YOUR-FIREBASE-APP.firebaseio.com/");

        // Get the root reference location of the database.
        reference = FirebaseDatabase.DefaultInstance.RootReference;
    }

    public void NextButton()
    {
        // ported the variable names from your latest question
        mDatabaseRef.Child("messages").Child("message").SetValueAsync(HighlightedObject.GetComponent<OBClick>().name);
    }
}

【讨论】:

  • 我看到了@derHugo,非常感谢先生。
  • 我刚刚在这里移植了FirebaseSDKUnityWebRequest 解决方案,所以我认为您可以关闭(删除)您之前的问题。
  • 好的。我上面的代码有没有办法存储为列表,而不是选择一个对象 - 用户选择多个对象?
猜你喜欢
  • 1970-01-01
  • 2019-06-27
  • 2017-11-27
  • 2013-06-30
  • 1970-01-01
  • 1970-01-01
  • 2020-04-20
  • 1970-01-01
  • 2022-11-12
相关资源
最近更新 更多