在Unity C#脚本中向本地主机发出GET请求

时间:2019-01-22 03:47:33

标签: c# json unity3d get

我正在尝试从Unity C#脚本中的本地主机发出JSON负载的GET请求。我已经使用单独的C#文件成功完成了POST,PUT和GET请求,但要统一使用UnityWebRequest。我的Unity代码在Unity控制台中返回错误“未知错误”,但在日志文件中,第一个错误是无法连接到目标主机。

通过更改网址解决了类似的问题。我知道我的网址是正确的,因为我可以使用Postman应用程序和自己的单独C#代码成功发出请求。 调试代码针对isNetworkError返回True。

我使用ToDo API教程here设置了服务器,并将项目内容修改为仅包含ID和字符串数据。

如果有人可以告诉我为什么它不起作用并提供解决方案,我将不胜感激!

我的代码:

    IEnumerator GetText()
{
    using (UnityWebRequest www = UnityWebRequest.Get("http://...localhost:[my port]/api/Todo"))
    {
        yield return www.SendWebRequest();

        if (www.isNetworkError || www.isHttpError)
        {
            UnityEngine.Debug.Log(www.error);
            UnityEngine.Debug.Log(www.isNetworkError);
        }
        else
        {
            // Show results as text
            UnityEngine.Debug.Log(www.downloadHandler.text);
        }
    }
}

这是Web服务器上数据的格式:

[
  {
    "id": 2,
    "data": "String text"
  }
]

作为参考,这是可工作的C#代码的一部分,它们可以单独工作以完成相同的操作:

async static void GetRequest(string url)
{
    using (HttpClient client = new HttpClient())
    {
        using (HttpResponseMessage response = await client.GetAsync(url))
        {
            using (HttpContent content = response.Content)
            {
                string mycontent = await content.ReadAsStringAsync();

                UnityEngine.Debug.Log(content);
            }
        }
    }
}

3 个答案:

答案 0 :(得分:1)

由于您的错误状态为“无法连接到目标主机”。这可能是因为“ ... localhost”不是有效的主机。

尝试将“ ... localhost”更改为“ localhost”,然后用有效的端口号替换[我的端口]。

答案 1 :(得分:0)

您正在尝试访问 http://...localhost:[我的端口] / api / Todo ,我认为这不是有效地址。请更改为正确的地址。

答案 2 :(得分:0)

实际上UnityWebRequest自动在端口443上连接,这就是为什么它与邮递员一起工作而不是统一工作的原因