【问题标题】:Converting Http Request to Unity Web Request将 Http 请求转换为 Unity Web 请求
【发布时间】:2021-01-13 21:54:05
【问题描述】:

我在将我的工作 HTTP 请求转换为 Unity Web 请求时遇到问题。更改的原因是我想使用 WebGL,我需要使用 Unity Web 请求并且不能使用 HTTP Web 请求。我试图转换为 Unity Web 请求,但它不起作用。这是我的代码:

    using Newtonsoft.Json;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Net.Http;
using UnityEngine;
using UnityEngine.UI;
using WBG_4;
 
public class send : MonoBehaviour
{
    public Text txtResponse;
 
    private string _Response;
 
    public void Send()
    {
        string uri = WBG_Config._EndPoint + "api/WhiteBoXGaming/Post_TestAPI";
        OAuth oAuth = new OAuth();
 
        oAuth.Administrator = WBG_Config._OAuth_Admin;
        oAuth.Password = WBG_Config._OAuth_Password;
 
        StartCoroutine(Testwebrequest(uri, oAuth));
 
        txtResponse.text = _Response;
    }
 
    IEnumerator Testwebrequest(string uri, object obj)
    {
        string json = JsonConvert.SerializeObject(obj);
        var client = new HttpClient();
        var webRequest = WebRequest.Create(uri);
        webRequest.Method = "POST";
        webRequest.ContentType = "application/json";
 
        using (var streamWriter = new StreamWriter(webRequest.GetRequestStream()))
        {
            streamWriter.Write(json);
        }
 
        var httpResponse = (HttpWebResponse)webRequest.GetResponse();
        using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
        {
            var result = streamReader.ReadToEnd();
            _Response = Convert.ToString(result);
        }
 
        yield return _Response;
    }
}

以上是工作代码。这个请求没有问题。现在我正在尝试转换为 Unity Web 请求。目前还没有成功。我已经尝试了下面的代码,它命中了 API,但它都是 NULL。我认为这段代码 sn-p 很接近,但我做错了什么,导致我的数据总是以 NULL 的形式出现。

IEnumerator Testwebrequest(string uri, object obj)
{
    string json = JsonConvert.SerializeObject(obj);
    var client = new HttpClient();
    var webRequest = WebRequest.Create(uri);
    webRequest.Method = "POST";
    webRequest.ContentType = "application/json";

    using (var streamWriter = new StreamWriter(webRequest.GetRequestStream()))
    {
        streamWriter.Write(json);
    }

    var httpResponse = (HttpWebResponse)webRequest.GetResponse();
    using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
    {
        var result = streamReader.ReadToEnd();
        _Response = Convert.ToString(result);
    }

    yield return _Response;
}

更新: 我能够让电话正常工作,但现在我需要让数据返回到一个对象中。这是我目前所拥有的:

IEnumerator Post(string url, string bodyJsonString)
{
    var request = new UnityWebRequest(url, "POST");
    byte[] bodyRaw = Encoding.UTF8.GetBytes(bodyJsonString);
    request.uploadHandler = (UploadHandler)new UploadHandlerRaw(bodyRaw);
    request.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();
    request.SetRequestHeader("Content-Type", "application/json");

    yield return request.Send();
    
    Debug.Log("Status Code: " + request.responseCode);

    var response = request.downloadHandler.text;
    using (var streamReader = new StreamReader(response))
    {
        var result = streamReader.ReadToEnd();
        _Response = Convert.ToString(result);
    }

    yield return _Response;



    txtResponse.text = request.ToString();
}

【问题讨论】:

标签: c# .net api unity3d


【解决方案1】:

经过多次反复试验,我想通了。我希望这可以帮助其他尝试执行 Unity Web 请求的人:

 public void Send()
{
    string uri = WBG_Config._EndPoint + "api/YOUR ROUTE HERE"; 
    OAuth oAuth = new OAuth();

    oAuth.Administrator = WBG_Config._OAuth_Admin;
    oAuth.Password = WBG_Config._OAuth_Password;

    string json = JsonConvert.SerializeObject(oAuth);

    StartCoroutine(Post(uri, json));
}

IEnumerator Post(string url, string bodyJsonString)
{
    var request = new UnityWebRequest(url, "POST");
    byte[] bodyRaw = Encoding.UTF8.GetBytes(bodyJsonString);
    request.uploadHandler = (UploadHandler)new UploadHandlerRaw(bodyRaw);
    request.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();
    request.SetRequestHeader("Content-Type", "application/json");

    yield return request.Send();
    
    Debug.Log("Status Code: " + request.responseCode);

    var response = request.downloadHandler.data;
    string json = System.Text.Encoding.UTF8.GetString(response);
    var _Response = JsonConvert.DeserializeObject<string>(json);

    yield return _Response;

    txtResponse.text = _Response;
}

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-25
    • 2020-12-21
    相关资源
    最近更新 更多