예제 #1
0
        /// <summary>
        /// Create an entity with any type and insert it to an entity-set on the service.
        /// </summary>
        /// <param name="url">The URL of the entity-set on the service.</param>
        /// <param name="requestHeaders">The request headers.</param>
        /// <param name="entity">The non-media type entity template.</param>
        /// <param name="isMediaType">Indicate whether the inserted entity is media type or not.</param>
        /// <param name="additionInfos">The addition information.
        /// (This output parameter must be qualified with an 'ref' key word.)</param>
        /// <returns>Returns the response.</returns>
        public static Response CreateEntity(string url, IEnumerable <KeyValuePair <string, string> > requestHeaders, JObject entity, bool isMediaType, ref List <AdditionalInfo> additionalInfos)
        {
            Response resp = null;

            if (!Uri.IsWellFormedUriString(url, UriKind.Absolute) || null == entity)
            {
                return(resp);
            }

            if (isMediaType)
            {
                AdditionalInfo additionalInfo = null;
                resp = CreateMediaTypeEntity(url, requestHeaders, out additionalInfo);
                additionalInfos.RemoveAt(additionalInfos.Count - 1);
                additionalInfos.Add(additionalInfo);
            }
            else
            {
                resp = CreateEntity(url, entity.ToString(), requestHeaders);
            }

            return(resp);
        }
예제 #2
0
        /// <summary>
        /// Create the entity with the media-type.
        /// </summary>
        /// <param name="url">The URL of an entity-set with media-type.</param>
        /// <param name="requestHeaders">The request headers.</param>
        /// <param name="additionalInfo">The additional information of the new inserted entity.</param>
        /// <returns>Returns the response.</returns>
        private static Response CreateMediaTypeEntity(string url, IEnumerable <KeyValuePair <string, string> > requestHeaders, out AdditionalInfo additionalInfo)
        {
            additionalInfo = null;
            if (!Uri.IsWellFormedUriString(url, UriKind.Absolute))
            {
                return(null);
            }

            string payload   = string.Empty;
            var    imageResp = CreateImage(url, requestHeaders, WebHelper.ImagePath);

            if (null != imageResp && HttpStatusCode.Created == imageResp.StatusCode)
            {
                string entity = string.Empty;
                using (var sr = new StreamReader(imageResp.GetResponseStream()))
                {
                    string entityId      = string.Empty;
                    string etag          = string.Empty;
                    string mediaEtag     = string.Empty;
                    string mediaReadLink = string.Empty;
                    string contextURL    = string.Empty;
                    payload = sr.ReadToEnd();
                    var mediaEntity = JObject.Parse(payload);
                    var props       = mediaEntity.Children <JProperty>();
                    foreach (var prop in props)
                    {
                        if (Constants.OdataV4JsonIdentity == prop.Name)
                        {
                            contextURL = prop.Value.ToString();
                        }
                        else if (Constants.V4OdataMediaReadLink == prop.Name)
                        {
                            mediaReadLink = prop.Value.ToString();
                        }
                        else if (Constants.V4OdataId == prop.Name)
                        {
                            entityId = prop.Value.ToString();
                        }
                        else if (Constants.V4OdataEtag == prop.Name)
                        {
                            etag = prop.Value.ToString();
                        }
                        else if (prop.Name.Contains(Constants.V4OdataMediaEtag))
                        {
                            mediaEtag = prop.Value.ToString();
                        }
                    }

                    if (string.IsNullOrEmpty(entityId))
                    {
                        if (!mediaReadLink.StartsWith("http"))
                        {
                            entityId = contextURL.Split('$')[0] + mediaReadLink;
                        }
                        else
                        {
                            entityId = mediaReadLink.Split('$')[0];
                        }
                    }

                    entityId = entityId.Split('$')[0];

                    additionalInfo = new AdditionalInfo(entityId, etag, mediaEtag);
                }
            }

            return(new Response(imageResp.StatusCode, imageResp.Headers.ToString(), payload));
        }
예제 #3
0
        /// <summary>
        /// Create the entity with the media-type.
        /// </summary>
        /// <param name="url">The URL of an entity-set with media-type.</param>
        /// <param name="requestHeaders">The request headers.</param>
        /// <param name="additionalInfo">The additional information of the new inserted entity.</param>
        /// <returns>Returns the response.</returns>
        private static Response CreateMediaTypeEntity(string url, IEnumerable<KeyValuePair<string, string>> requestHeaders, out AdditionalInfo additionalInfo)
        {
            additionalInfo = null;
            if (!Uri.IsWellFormedUriString(url, UriKind.Absolute))
            {
                return null;
            }

            string payload = string.Empty;
            var imageResp = CreateImage(url, requestHeaders, WebHelper.ImagePath);
            if (null != imageResp && HttpStatusCode.Created == imageResp.StatusCode)
            {
                string entity = string.Empty;
                using (var sr = new StreamReader(imageResp.GetResponseStream()))
                {
                    string entityId = string.Empty;
                    string etag = string.Empty;
                    string mediaEtag = string.Empty;
                    string mediaReadLink = string.Empty;
                    string contextURL = string.Empty;
                    payload = sr.ReadToEnd();
                    var mediaEntity = JObject.Parse(payload);
                    var props = mediaEntity.Children<JProperty>();
                    foreach (var prop in props)
                    {
                        if (Constants.OdataV4JsonIdentity == prop.Name)
                        {
                            contextURL = prop.Value.ToString();
                        }
                        else if (Constants.V4OdataMediaReadLink == prop.Name)
                        {
                            mediaReadLink = prop.Value.ToString();
                        }
                        else if (Constants.V4OdataId == prop.Name)
                        {
                            entityId = prop.Value.ToString();
                        }
                        else if (Constants.V4OdataEtag == prop.Name)
                        {
                            etag = prop.Value.ToString();
                        }
                        else if (prop.Name.Contains(Constants.V4OdataMediaEtag))
                        {
                            mediaEtag = prop.Value.ToString();
                        }
                    }

                    if (string.IsNullOrEmpty(entityId))
                    {
                        if(!mediaReadLink.StartsWith("http"))
                        {
                            entityId = contextURL.Split('$')[0] + mediaReadLink;
                        }
                        else
                        {
                            entityId = mediaReadLink.Split('$')[0];
                        }
                    }

                    entityId = entityId.Split('$')[0];

                    additionalInfo = new AdditionalInfo(entityId, etag, mediaEtag);
                }
            }

            return new Response(imageResp.StatusCode, imageResp.Headers.ToString(), payload);
        }