在Unity上使用.NET自己的httpClient类

ASP*_*uma 4 c# httpwebrequest unity-game-engine web unity5

我正在尝试从Unity执行HTTP删除请求,并尝试使用.Net的System.Web命名空间中包含的HttpRequest类.

我怎样才能实现这一点,我认为必须对某个命名空间进行某种导入,但是如何?

希望有人可以给我一些指导

Pro*_*mer 9

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

用法:

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目录,您应该能够HttpClient在导入System.Net.Http命名空间后使用.如果还有其他关于缺少依赖项的错误,您也可以从此路径获取dll并将它们复制到您的<ProjectName>\Assets目录中.


noo*_*ntz 5

在当前版本的 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);
        }
    }
Run Code Online (Sandbox Code Playgroud)

我在https://forum.unity.com/threads/httpclient-on-net-standard-2-0.608800/上的答案的副本