在 Unity 上使用 .NET 自带的 httpClient class
Use .NET's own httpClient class on Unity
我正在尝试从 Unity 发出 HTTP 删除请求,并想到使用 .Net
的 System.Web 命名空间中包含的 HttpRequest class
我怎样才能做到这一点,我想必须对该名称空间进行某种导入,但是怎么做呢?
希望有人能给我一些指导
HttpClient
仅适用于 4.5 NET 及更高版本,Unity 不使用该版本。 Unity使用了大约3.5.NET版本。
如果您使用的是 Unity 5.3,UnityWebRequest.Delete
可用于发出删除请求。它可以在 Experimental.Networking
命名空间中找到。如果您使用的是 Unity 5.4 及更高版本,UnityWebRequest
可以在 UnityEngine.Networking;
命名空间中找到。
完整的工作示例:
IEnumerator makeRequest(string url)
{
UnityWebRequest delReq = UnityWebRequest.Delete(url);
yield return delReq.Send();
if (delReq.isError)
{
Debug.Log("Error: " + delReq.error);
}
else
{
Debug.Log("Received " + delReq.downloadHandler.text);
}
}
用法:
StartCoroutine(makeRequest("http://www.example.com/whatever"));
确保包含 using UnityEngine.Networking
。你可以用它找到完整的例子 .
编辑(更新)
Unity 现在支持 .NET 4.5,因此您现在可以根据需要使用 HttpClient。有关如何启用它的信息,请参阅 post。
启用后,
在我的电脑上转到 <UnityInstallationDirectory>\Editor\Data\MonoBleedingEdge\lib\mono.5
或例如 C:\Program Files\Unity\Editor\Data\MonoBleedingEdge\lib\mono.5
。
进入此目录后,将 System.Net.Http.dll
复制到您的 <ProjectName>\Assets
目录,您应该可以在导入 System.Net.Http
命名空间后使用 HttpClient
。如果还有一些关于缺少依赖项的其他错误,您也可以从此路径获取 dll,并将它们也复制到您的 <ProjectName>\Assets
目录。
在 Unity 的当前版本中,即使在 .NET Standard 2.0 目标上也支持开箱即用的 httpClient。这是我如何使用它访问 REST api.
的示例代码
public static async Task<Resource> GetResource()
{
using (var httpClient = new HttpClient())
{
httpClient.BaseAddress = new Uri(URL);
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var response = await httpClient.GetAsync("api/session");
if (response.StatusCode != HttpStatusCode.OK)
return null;
var resourceJson = await response.Content.ReadAsStringAsync();
return JsonUtility.FromJson<Resource>(resourceJson);
}
}
我在 https://forum.unity.com/threads/httpclient-on-net-standard-2-0.608800/
上的回答副本
我正在尝试从 Unity 发出 HTTP 删除请求,并想到使用 .Net
的 System.Web 命名空间中包含的 HttpRequest class我怎样才能做到这一点,我想必须对该名称空间进行某种导入,但是怎么做呢?
希望有人能给我一些指导
HttpClient
仅适用于 4.5 NET 及更高版本,Unity 不使用该版本。 Unity使用了大约3.5.NET版本。
如果您使用的是 Unity 5.3,UnityWebRequest.Delete
可用于发出删除请求。它可以在 Experimental.Networking
命名空间中找到。如果您使用的是 Unity 5.4 及更高版本,UnityWebRequest
可以在 UnityEngine.Networking;
命名空间中找到。
完整的工作示例:
IEnumerator makeRequest(string url)
{
UnityWebRequest delReq = UnityWebRequest.Delete(url);
yield return delReq.Send();
if (delReq.isError)
{
Debug.Log("Error: " + delReq.error);
}
else
{
Debug.Log("Received " + delReq.downloadHandler.text);
}
}
用法:
StartCoroutine(makeRequest("http://www.example.com/whatever"));
确保包含 using UnityEngine.Networking
。你可以用它找到完整的例子
编辑(更新)
Unity 现在支持 .NET 4.5,因此您现在可以根据需要使用 HttpClient。有关如何启用它的信息,请参阅
启用后,
在我的电脑上转到 <UnityInstallationDirectory>\Editor\Data\MonoBleedingEdge\lib\mono.5
或例如 C:\Program Files\Unity\Editor\Data\MonoBleedingEdge\lib\mono.5
。
进入此目录后,将 System.Net.Http.dll
复制到您的 <ProjectName>\Assets
目录,您应该可以在导入 System.Net.Http
命名空间后使用 HttpClient
。如果还有一些关于缺少依赖项的其他错误,您也可以从此路径获取 dll,并将它们也复制到您的 <ProjectName>\Assets
目录。
在 Unity 的当前版本中,即使在 .NET Standard 2.0 目标上也支持开箱即用的 httpClient。这是我如何使用它访问 REST api.
的示例代码public static async Task<Resource> GetResource()
{
using (var httpClient = new HttpClient())
{
httpClient.BaseAddress = new Uri(URL);
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var response = await httpClient.GetAsync("api/session");
if (response.StatusCode != HttpStatusCode.OK)
return null;
var resourceJson = await response.Content.ReadAsStringAsync();
return JsonUtility.FromJson<Resource>(resourceJson);
}
}
我在 https://forum.unity.com/threads/httpclient-on-net-standard-2-0.608800/
上的回答副本