internal static void MakeApiCall <TRequestType, TResultType>(string api, string apiEndpoint, TRequestType request, Action <TResultType> resultCallback, Action <EditorModels.PlayFabError> errorCallback) { var url = apiEndpoint + api; var req = JsonWrapper.SerializeObject(request, PlayFabEditorUtil.ApiSerializerStrategy); //Set headers var headers = new Dictionary <string, string> { { "Content-Type", "application/json" }, { "X-ReportErrorAsSuccess", "true" }, { "X-PlayFabSDK", string.Format("{0}_{1}", PlayFabEditorHelper.EDEX_NAME, PlayFabEditorHelper.EDEX_VERSION) } }; if (api.Contains("/Server/") || api.Contains("/Admin/")) { if (PlayFabEditorDataService.activeTitle == null || string.IsNullOrEmpty(PlayFabEditorDataService.activeTitle.SecretKey)) { PlayFabEditor.RaiseStateUpdate(PlayFabEditor.EdExStates.OnError, "Must have PlayFabSettings.DeveloperSecretKey set to call this method"); return; } headers.Add("X-SecretKey", PlayFabEditorDataService.activeTitle.SecretKey); } //Encode Payload var payload = System.Text.Encoding.UTF8.GetBytes(req.Trim()); var www = new WWW(url, payload, headers); PlayFabEditor.RaiseStateUpdate(PlayFabEditor.EdExStates.OnHttpReq, api, PlayFabEditorHelper.MSG_SPIN_BLOCK); EditorCoroutine.start(Post(www, (response) => { var httpResult = JsonWrapper.DeserializeObject <HttpResponseObject>(response, PlayFabEditorUtil.ApiSerializerStrategy); if (httpResult.code == 200) { try { PlayFabEditor.RaiseStateUpdate(PlayFabEditor.EdExStates.OnHttpRes, api); var dataJson = JsonWrapper.SerializeObject(httpResult.data, PlayFabEditorUtil.ApiSerializerStrategy); var result = JsonWrapper.DeserializeObject <TResultType>(dataJson, PlayFabEditorUtil.ApiSerializerStrategy); if (resultCallback != null) { resultCallback(result); } } catch (Exception e) { PlayFabEditor.RaiseStateUpdate(PlayFabEditor.EdExStates.OnError, e.Message); } } else { if (errorCallback != null) { PlayFab.Editor.EditorModels.PlayFabError playFabError = PlayFabEditorHelper.GeneratePlayFabError(response); errorCallback(playFabError); } else { PlayFabEditor.RaiseStateUpdate(PlayFabEditor.EdExStates.OnError, string.Format("ErrorCode:{0} -- {1}", httpResult.code, httpResult.status)); } } }, (error) => { if (errorCallback != null) { var playFabError = PlayFabEditorHelper.GeneratePlayFabError(error); errorCallback(playFabError); } else { PlayFabEditor.RaiseStateUpdate(PlayFabEditor.EdExStates.OnError, error); } }), www); }