public async Task <string> Request(HttpMethod method, string url, JObject parameters = null, bool skipRefreshToken = false)
        {
            if (!skipRefreshToken)
            {
                await RefreshAccessToken();
            }

            StringContent content = new StringContent(parameters?.ToString(Formatting.None));

            NameValueCollection query = HttpUtility.ParseQueryString(string.Empty);

            query.Add("query", parameters.ToString(Formatting.None));

            HttpRequestMessage httpRequestMessage = new HttpRequestMessage();

            httpRequestMessage.Headers.Add("Authorization", string.Format("Bearer {0}", TokenManager.singleton.accessToken));
            httpRequestMessage.Headers.Add("Content-Type", "application/json");
            httpRequestMessage.Method = method;

            if (method == HttpMethod.Post || method == HttpMethod.Put)
            {
                httpRequestMessage.Content    = content;
                httpRequestMessage.RequestUri = new Uri(url);
            }
            else
            {
                httpRequestMessage.RequestUri = new Uri(url + query.ToString());
            }

            HttpResponseMessage response = await httpClient.SendAsync(httpRequestMessage);

            string body = await response.Content.ReadAsStringAsync();

            int statusCode = (int)response.StatusCode;

            switch (statusCode)
            {
            case 200:
                return(body);

            case 401:
                TokenManager.singleton.Clear();
                throw new HttpException(401, "Unauthorized.");

            case 403:
                throw new HttpException(403, "Forbidden.");

            default:
                HttpException.HttpErrors errors = JsonUtility.FromJson <HttpException.HttpErrors>(body);
                throw new HttpException(statusCode, errors.errors);
            }
        }
Exemple #2
0
        public async Task <string> Request(HttpMethod method, string url, JObject parameters, bool skipRefreshToken = false)
        {
            if (!skipRefreshToken)
            {
                await RefreshAccessToken();
            }

            string queryString = "";

            if ((method == HttpMethod.Delete || method == HttpMethod.Get) && parameters != null)
            {
                queryString = "?query=" + parameters.ToString(Formatting.None);
            }

            UnityWebRequest request;

            switch (method)
            {
            case HttpMethod.Delete:
                request = new UnityWebRequest(url + queryString);
                request.downloadHandler = new DownloadHandlerBuffer();
                request.method          = UnityWebRequest.kHttpVerbDELETE;
                break;

            case HttpMethod.Get:
                request = new UnityWebRequest(url + queryString);
                request.downloadHandler = new DownloadHandlerBuffer();
                request.method          = UnityWebRequest.kHttpVerbGET;
                break;

            case HttpMethod.Post:
                request = new UnityWebRequest(url);
                request.downloadHandler = new DownloadHandlerBuffer();
                request.method          = UnityWebRequest.kHttpVerbPOST;

                if (parameters != null)
                {
                    byte[] bytes = Encoding.UTF8.GetBytes(parameters.ToString(Formatting.None));
                    request.uploadHandler             = new UploadHandlerRaw(bytes);
                    request.uploadHandler.contentType = "application/json";
                }

                break;

            case HttpMethod.Put:
                request = new UnityWebRequest(url);
                request.downloadHandler = new DownloadHandlerBuffer();
                request.method          = UnityWebRequest.kHttpVerbPUT;

                if (parameters != null)
                {
                    byte[] bytes = Encoding.UTF8.GetBytes(parameters.ToString(Formatting.None));
                    request.uploadHandler             = new UploadHandlerRaw(bytes);
                    request.uploadHandler.contentType = "application/json";
                }

                break;

            default:
                request = null;
                break;
            }

            request.SetRequestHeader("Authorization", string.Format("Bearer {0}", tokenManager.accessToken));
            request.SetRequestHeader("Content-Type", "application/json");

            await request.SendWebRequest();

            string body = request.downloadHandler.text;

            switch (request.responseCode)
            {
            case 200:
                return(body);

            case 401:
                throw new HttpException(401, "Unauthorized.");

            case 403:
                throw new HttpException(403, "Forbidden.");

            default:
                HttpException.HttpErrors errors = JsonUtility.FromJson <HttpException.HttpErrors>(body);
                throw new HttpException((int)request.responseCode, errors.errors);
            }
        }