Получение 400 (Плохой запрос) с моей базой данных URL - PullRequest
0 голосов
/ 08 ноября 2019

Я столкнулся с проблемой, когда я пытаюсь выполнить запрос PUT для обновления и сохранения данных в моей базе данных Firebase, но по какой-то причине, когда я запускаю свой код и выбираю свой объект и нажимаю «Далее», я получаю ошибкус моим URL веб-запроса 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");
        }

1 Ответ

0 голосов
/ 08 ноября 2019

Сервис, похоже, требует определенного формата JSON. Так как ваша хардкорная версия работает

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

, но не один string Я думаю, вы должны использовать что-то вроде

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

Как упоминалось в ваш предыдущий вопрос :

В настоящее время ваш код будет зависать до тех пор, пока запрос не будет выполнен.

Я бы предпочел использовать 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...