在 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/

上的回答副本