我正在尝试从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);
}
}
}
}
答案 0 :(得分:1)
由于您的错误状态为“无法连接到目标主机”。这可能是因为“ ... localhost”不是有效的主机。
尝试将“ ... localhost”更改为“ localhost”,然后用有效的端口号替换[我的端口]。
答案 1 :(得分:0)
您正在尝试访问 http://...localhost:[我的端口] / api / Todo ,我认为这不是有效地址。请更改为正确的地址。
答案 2 :(得分:0)
实际上UnityWebRequest自动在端口443上连接,这就是为什么它与邮递员一起工作而不是统一工作的原因