0
0

More than 1 year has passed since last update.

UnityWebRequestを使って変数でPOSTする

Posted at

Step1:request body -> GetContext()でContextを取得する
Step2: response body -> SetContext()Contextをセットする

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
using System;


namespace UnityPostTest
{
    public class TestAPIManager : MonoBehaviour
    {
        [SerializeField, Header("入力欄")] TMP_InputField m_InputField = default;
        [SerializeField, Header("レスポンス")] TextMeshProUGUI m_ResponseText = default;
        

        public class Item
        {
            public string testResponse;
            public Item(string testResponse)
            {
                this.Response = Response;
            }

            public override string ToString()
            {
                return string.Format("{0}", Response);
            }

        }

        private string m_testContext;
        private const string baseUrl = "XXXXXXXX";
        private const string url = "/api/v1/test";
        
        //Contextをセット
        public void SetContext(string testContext)
        {
            m_testContext = testContext;
        }
        
        //Contextを取得
        public string GetContext()
        {
            if (string.IsNullOrWhiteSpace(m_testContext))
            {
                m_testContext = "";
            }

            return m_testContext;
        }

        //コルーチンを呼び出す
        public void OnClick(){
            Debug.Log("Sending Post Request");
            StartCoroutine(Post((result) => {
                print("Result from Coroutine:" + result);
            }));
        }

        public IEnumerator Post(Action<string> result)
        {

            string targetUrl = baseUrl + url;
            
            //request body
            WWWForm form = new WWWForm();
            form.AddField("test", m_InputField.text.ToString());
            form.AddField("testContext", GetContext());

            using(UnityWebRequest request = UnityWebRequest.Post(targetUrl, form)){
                request.SetRequestHeader("AUTHORIZATION", "XXXXXXX");
                request.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();

                // APIリクエストが返ってくるのを待つ
                yield return request.SendWebRequest();
                    
                //エラーのチェック
                if (request.result != UnityWebRequest.Result.Success) {
                    result(request.error);
                }
                else {
                    Debug.Log("Form upload complete!");
                    var item = JsonUtility.FromJson<Item>(request.downloadHandler.text);
                    m_ResponseText.text = item.Response.ToString();
                    //Contextをセットする
                    SetContext(item.Context.ToString());
                    result(request.downloadHandler.text);
                }
            }
        }
    }
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0