internal static async Task DoPut(this PlayFabSettings settings, string apiName, string url, string contentType, Stream data) { HttpResponseMessage httpResponse = null; if (settings.ApiCallback != null) { settings.ApiCallback(PlayFabApiEvent.SendingRequest, settings, apiName, "PUT", url, null); } using (HttpClient client = settings.CreateClient()) using (StreamContent body = new StreamContent(data)) { body.Headers.Add("Content-Type", contentType); httpResponse = await client.PutAsync(url, body); var httpResponseStream = await httpResponse.Content.ReadAsStreamAsync(); bool hasData = true; var buffer = new byte[4096]; do { int read = await httpResponseStream.ReadAsync(buffer, 0, buffer.Length); hasData = read != 0; } while (hasData); if (settings.ApiCallback != null) { settings.ApiCallback(PlayFabApiEvent.ReceivedReply, settings, apiName, "PUT", url, null); } } if (!httpResponse.IsSuccessStatusCode) { throw new PlayFabHttpException(httpResponse.StatusCode, httpResponse.ReasonPhrase); } }
internal static async Task <string> DoPost(this PlayFabSettings settings, string apiName, string url, object request, string authType, string authKey) { string bodyString = null; var serializer = JsonSerializer.Create(settings.JsonSettings); if (request == null) { bodyString = "{}"; } else if (request is String) { bodyString = (String)request; } else { StringWriter jsonString = new StringWriter(); using (var writer = new JsonTextWriter(jsonString) { Formatting = settings.JsonFormatting }) { serializer.Serialize(writer, request); bodyString = jsonString.ToString(); } } if (settings.ApiCallback != null) { settings.ApiCallback(PlayFabApiEvent.SendingRequest, settings, apiName, "POST", url, bodyString); } HttpResponseMessage httpResponse = null; String httpResponseString = null; using (HttpClient client = settings.CreateClient()) using (ByteArrayContent postBody = new ByteArrayContent(Encoding.UTF8.GetBytes(bodyString))) { postBody.Headers.Add("Content-Type", "application/json"); if (authType != null) { postBody.Headers.Add(authType, authKey); } postBody.Headers.Add("X-PlayFabSDK", PlayFabVersion.getVersionString()); httpResponse = await client.PostAsync(url, postBody); httpResponseString = await httpResponse.Content.ReadAsStringAsync(); } if (settings.ApiCallback != null) { settings.ApiCallback(PlayFabApiEvent.ReceivedReply, settings, apiName, "POST", url, httpResponseString); } if (!httpResponse.IsSuccessStatusCode) { if (String.IsNullOrEmpty(httpResponseString) || httpResponse.StatusCode == HttpStatusCode.NotFound) { throw new PlayFabHttpException(httpResponse.StatusCode, httpResponse.ReasonPhrase); } PlayFabJsonError errorResult = null; errorResult = serializer.Deserialize <PlayFabJsonError>(new JsonTextReader(new StringReader(httpResponseString))); throw new PlayFabException(errorResult); } if (String.IsNullOrEmpty(httpResponseString)) { throw new PlayFabException(PlayFabErrorCode.Unknown, "Internal server error"); } return(httpResponseString); }