예제 #1
0
        /// <summary>
        ///     Posts to the server using Json data
        /// </summary>
        /// <param name="virtualPath">Path you want to access based on the base url of the token. Start it with '~/'</param>
        /// <param name="queryString">The query string, already URL encoded</param>
        /// <param name="token">The current token.</param>
        /// <param name="postData">The data to post.</param>
        /// <param name="virtualPathArgs">The parameters to replace tokens in the virtualPath with.</param>
        /// <returns></returns>
        public static JObject Put(string virtualPath, string queryString, SessionToken token, object postData, params object[] virtualPathArgs)
        {
            var client = new HttpClient();

            JObject resultData = null;

            CleanupVirtualPathArgs(virtualPathArgs);

            string url = token.CreateUrl(string.Format(virtualPath, virtualPathArgs), queryString, HttpMethod.Put);

            token.PrepPostPutHeaders(client);

            PreProcessPostData(postData, url, HttpMethod.Put);
            string jsonToPut = string.Empty;

            if (postData != null)
            {
                jsonToPut = JsonConvert.SerializeObject(postData, GlobalConfiguration.GetJsonSerializerSettings());
            }

            string signature = CreateAuthorization(client.DefaultRequestHeaders, new Uri(url), "PUT", jsonToPut, token.DeveloperKey, token.DeveloperSecret);

            client.DefaultRequestHeaders.Add("X-Authorization", signature);

            var content = new StringContent(jsonToPut);

            content.Headers.ContentType.MediaType = "application/json";

            OutputCurlCommand(client, HttpMethod.Put, url, content);

            Task task = client.PutAsync(url, content).ContinueWith(async taskwithresponse =>
            {
                try
                {
                    JObject result = await taskwithresponse.Result.Content.ReadAsAsync <JObject>();
                    resultData     = ProcessResultData(result, url, HttpMethod.Post);
                }
                catch (Exception ex)
                {
                    HandleTaskException(taskwithresponse, ex, HttpMethod.Put);
                }
            });

            task.Wait();

            return(resultData);
        }
        public ApiMetaData(JObject metaNode)
        {
            var tempMeta = JsonConvert.DeserializeObject <ApiMetaData>(metaNode.ToString(), GlobalConfiguration.GetJsonSerializerSettings());

            ErrorMessages = tempMeta.ErrorMessages;
            ExtraMetaData = tempMeta.ExtraMetaData;
            Method        = tempMeta.Method;
            StatusMsg     = tempMeta.StatusMsg;
            StatusCode    = tempMeta.StatusCode;
            Href          = tempMeta.Href;
        }
예제 #3
0
        private static List <T> ConvertToRestTokenObjectList <T>(SessionToken token, JToken resultData) where T : RestObject, new()
        {
            var result = new List <T>();

            if (resultData != null)
            {
                JToken dataNode = resultData["data"];
                if (dataNode != null)
                {
                    var dataTypeToken = dataNode.SelectToken("dataType", false);
                    if (dataTypeToken != null)
                    {
                        string dataType = dataTypeToken.Value <string>();

                        if (dataType.Equals("PagedData", StringComparison.OrdinalIgnoreCase))
                        {
                            //The data for paged data resides in items
                            JToken itemsNode = dataNode.SelectToken("items", false);

                            if (itemsNode != null)
                            {
                                dataNode = itemsNode;
                            }
                        }
                    }


                    if (dataNode.Type == JTokenType.Array)
                    {
                        foreach (JToken dataItem in dataNode.Children())
                        {
                            var item = JsonConvert.DeserializeObject <T>(dataItem.ToString(), GlobalConfiguration.GetJsonSerializerSettings());

                            if (item != null)
                            {
                                item.PopulateSessionToken(token);
                                item.Meta = resultData["meta"].ToObject <ApiMetaData>();
                            }

                            result.Add(item);
                        }
                    }
                    else
                    {
                        var item = JsonConvert.DeserializeObject <T>(dataNode.ToString(), GlobalConfiguration.GetJsonSerializerSettings());

                        if (item != null)
                        {
                            item.PopulateSessionToken(token);
                            item.Meta = resultData["meta"].ToObject <ApiMetaData>();
                        }

                        result.Add(item);
                    }
                }
            }

            return(result);
        }
예제 #4
0
        private static Page <T> ConvertToRestTokenObjectPage <T>(SessionToken token, JToken resultData) where T : RestObject, new()
        {
            var      result    = new Page <T>(token);
            List <T> resultSet = new List <T>();

            if (resultData != null)
            {
                JToken dataNode = resultData["data"];
                if (dataNode != null)
                {
                    var paginationToken = resultData.SelectToken("pagination", false);
                    if (paginationToken != null)
                    {
                        result.Meta = resultData["meta"].ToObject <ApiMetaData>();

                        //Pull all the paged data information
                        result.First        = paginationToken["first"].Value <string>();
                        result.Last         = paginationToken["last"].Value <string>();
                        result.Limit        = paginationToken["limit"].Value <int>();
                        result.Next         = paginationToken["next"].Value <string>();
                        result.Previous     = paginationToken["previous"].Value <string>();
                        result.TotalRecords = paginationToken["totalRecords"].Value <int>();
                    }


                    if (dataNode.Type == JTokenType.Array)
                    {
                        foreach (JToken dataItem in dataNode.Children())
                        {
                            var item = JsonConvert.DeserializeObject <T>(dataItem.ToString(), GlobalConfiguration.GetJsonSerializerSettings());

                            if (item != null)
                            {
                                item.PopulateSessionToken(token);
                                item.Meta = resultData["meta"].ToObject <ApiMetaData>();
                            }

                            resultSet.Add(item);
                        }
                    }
                    else
                    {
                        var item = JsonConvert.DeserializeObject <T>(dataNode.ToString(), GlobalConfiguration.GetJsonSerializerSettings());

                        if (item != null)
                        {
                            item.PopulateSessionToken(token);
                            item.Meta = resultData["meta"].ToObject <ApiMetaData>();
                        }

                        resultSet.Add(item);
                    }
                }
            }

            result.Items = resultSet;

            return(result);
        }
예제 #5
0
        private static T ConvertToRestTokenObject <T>(SessionToken token, JObject resultData) where T : RestObject, new()
        {
            T result = null;

            if (resultData != null)
            {
                JToken dataNode = resultData["data"];
                if (dataNode != null)
                {
                    if (dataNode.Type == JTokenType.Array)
                    {
                        if (dataNode.First != null)
                        {
                            result = JsonConvert.DeserializeObject <T>(dataNode.First.ToString(), GlobalConfiguration.GetJsonSerializerSettings());

                            if (result != null)
                            {
                                result.PopulateSessionToken(token);
                                result.Meta = resultData["meta"].ToObject <ApiMetaData>(); // JsonConvert.DeserializeObject<ApiMetaData>(resultData["meta"].ToString(), GlobalConfiguration.GetJsonSerializerSettings());
                            }
                        }
                    }
                    else
                    {
                        result = JsonConvert.DeserializeObject <T>(dataNode.ToString(), GlobalConfiguration.GetJsonSerializerSettings());

                        if (result != null)
                        {
                            result.PopulateSessionToken(token);
                            result.Meta = resultData["meta"].ToObject <ApiMetaData>();
                        }
                    }
                }
                else
                {
                    JToken metaNode = resultData["meta"];
                    if (metaNode != null)
                    {
                        LogEventManager.Error(string.Format("No data returned: {0}{1}", Environment.NewLine, metaNode.ToString()));
                    }
                }
            }

            return(result);
        }