使用NET';在Unity上拥有自己的httpClient类

本文关键字:拥有 自己的 httpClient Unity NET 使用 | 更新日期: 2023-09-27 17:59:10

我正在尝试从Unity执行HTTP Delete请求,并尝试使用系统中包含的HttpRequest类。的Web命名空间。净

我认为必须对该名称空间进行某种导入,但如何实现呢?

希望有人能给我一些方向

使用NET';在Unity上拥有自己的httpClient类

HttpClient仅在4.5NET及更高版本中可用,Unity不使用该版本。Unity使用大约3.5.NET版本。

如果您使用的是Unity 5.3,则UnityWebRequest.Delete可用于发出Delete请求。它可以在Experimental.Networking命名空间中找到。如果您使用的是Unity 5.4及以上版本,则可以在UnityEngine.Networking;命名空间中找到UnityWebRequest

完整的工作示例:

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'4.5或例如C:'Program Files'Unity'Editor'Data'MonoBleedingEdge'lib'mono'4.5

进入该目录后,将System.Net.Http.dll复制到<ProjectName>'Assets目录中,导入System.Net.Http命名空间后应该可以使用HttpClient。如果缺少依赖项还有其他错误,您也可以从该路径获取dll,并将其复制到<ProjectName>'Assets目录中。

在当前版本的Unity中,httpClient是开箱即用的,即使在上也是如此。NET标准2.0目标。下面是关于如何使用它访问RESTapi的示例代码。

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/