как опубликовать мои данные с помощью вызова UnityWebRequest post api

Вот мой запрос API

public IEnumerator Login(string bodyJsonString)
{
    Debug.Log(bodyJsonString);

    UnityWebRequest req = UnityWebRequest.Post("localhost:3000/login", bodyJsonString);
    req.SetRequestHeader("content-type", "application/json");
    yield return req.SendWebRequest();
    if (req.isNetworkError || req.isHttpError)
    {
        Debug.Log(req.error);
    }
    else
    {
        Debug.Log("Form upload complete!");
    }

}

Он возвращает код состояния ошибки 500, а на сервере возвращает ошибку Неожиданный токен % в JSON в позиции 0", "серьезность

Вот мой вызов сопрограммы

public void submitLogin()
{

    _username = userInputField.GetComponent<InputField>().text;
    _password = passwordInputField.GetComponent<InputField>().text;

    Debug.Log("username" + _username);
    Debug.Log("password" + _password);

    string body = "{'username':'" + _username + "','password','" + _password + "'}";

    //API Call
    authChexi = new Auth();
    StartCoroutine(authChexi.Login(body));
}

Дайте мне знать, если у вас есть идеи о том, как справиться с моим телом формы. Спасибо


person Frank Mendez    schedule 26.03.2020    source источник
comment
Возможно, связано: stackoverflow.com/a/59878957/7111561 и stackoverflow.com/a/59405175/7111561   -  person derHugo    schedule 26.03.2020
comment
Также я надеюсь, что вы каким-то образом избежите этого ... что, если пользователь введет ' или } как часть имени пользователя или, в частности, пароля?   -  person derHugo    schedule 26.03.2020
comment
Почему вы вручную создаете строку JSON? Это почти наверняка, где ваша проблема. Вместо этого используйте встроенный в Unity сериализатор JSON.   -  person Ian Kemp    schedule 26.03.2020


Ответы (1)


Итак, я обновил свою функцию. Я немного покопался и, наконец, решил это. Моя ошибка действительно заключалась в ручном создании JSON. Итак, вот мое решение.

public void submitLogin()
{

    _username = userInputField.GetComponent<InputField>().text;
    _password = passwordInputField.GetComponent<InputField>().text;

    //API Call
    authChexi = new Auth();
    StartCoroutine(authChexi.Login(_username, _password));
}

Создал пользовательские данные класса для моего объекта json

public class UserData 
{
    public string username;
    public string password;
    public string email;
}

И вызовите API

public IEnumerator Login(string username, string password)
{
    //@TODO: call API login
    // Store Token
    // Add Token to headers

    var user = new UserData();
    user.username = username;
    user.password = password;

    string json = JsonUtility.ToJson(user);

    var req = new UnityWebRequest("localhost:3000/login", "POST");
    byte[] jsonToSend = new System.Text.UTF8Encoding().GetBytes(json);
    req.uploadHandler = (UploadHandler)new UploadHandlerRaw(jsonToSend);
    req.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();
    req.SetRequestHeader("Content-Type", "application/json");

    //Send the request then wait here until it returns
    yield return req.SendWebRequest();

    if (req.isNetworkError)
    {
        Debug.Log("Error While Sending: " + req.error);
    }
    else
    {
        Debug.Log("Received: " + req.downloadHandler.text);
    }

}

И теперь это работает как шарм!

person Frank Mendez    schedule 26.03.2020