コード例 #1
0
ファイル: CreateHandler.cs プロジェクト: zhonli/odata.net
        /// <summary>
        /// Parses the request URI and message body to create a new entry in the data store.
        /// </summary>
        /// <param name="messageBody">Stream containing the new entry to create.</param>
        /// <returns>Stream containing the new entry if successful, otherwise an error.</returns>
        public Stream ProcessCreateRequest(Stream messageBody)
        {
            object        result;
            IEdmEntitySet targetEntitySet;

            try
            {
                var queryContext = this.GetDefaultQueryContext();
                targetEntitySet = queryContext.ResolveEntitySet();
                IncomingRequestMessage message = this.GetIncomingRequestMessage(messageBody);

                result = ProcessPostBody(message, targetEntitySet);
            }
            catch (Exception error)
            {
                return(this.WriteErrorResponse(400, error));
            }

            return(this.WriteResponse(
                       200,
                       (writer, writerSettings, responseMessage) =>
            {
                ODataVersion targetVersion = writerSettings.Version.GetValueOrDefault();
                responseMessage.SetHeader("Location", ODataObjectModelConverter.BuildEntryUri(result, targetEntitySet, targetVersion).OriginalString);
                ResponseWriter.WriteEntry(writer.CreateODataResourceWriter(targetEntitySet), result, targetEntitySet, this.Model, targetVersion, Enumerable.Empty <string>());
            }));
        }
コード例 #2
0
ファイル: UpdateHandler.cs プロジェクト: zhonli/odata.net
        /// <summary>
        /// Parses a request to update a property and makes the corresponding change to the
        /// data store.
        /// </summary>
        /// <param name="messageBody">Message body containing the new property value.</param>
        /// <param name="propertyName">The name of the property to modify.</param>
        /// <returns>Stream containg the updated entry if successful, otherwise an error.</returns>
        public Stream ProcessTopLevelPropertyRequest(Stream messageBody, string propertyName)
        {
            object        result;
            IEdmEntitySet targetEntitySet;

            try
            {
                // ODL Query fails to parse EntitySet(key)/Property so we remove the property name and parse the rest of the URI.
                var          requestUriWithoutPropertyName = new Uri(this.IncomingRequestUri.OriginalString.Replace(propertyName, string.Empty));
                QueryContext queryContext = QueryContext.ParseUri(requestUriWithoutPropertyName, this.Model);

                targetEntitySet = queryContext.ResolveEntitySet();
                var keyValues = queryContext.ResolveKeyValues();

                var message = this.GetIncomingRequestMessage(messageBody);
                using (var reader = new ODataMessageReader(message, this.GetDefaultReaderSettings(), this.Model))
                {
                    ODataProperty property = reader.ReadProperty();
                    this.DataContext.UpdateItem(targetEntitySet, keyValues, property.Name, property.Value);
                }

                result = this.DataContext.GetItem(targetEntitySet, keyValues);
            }
            catch (Exception error)
            {
                return(this.WriteErrorResponse(400, error));
            }

            return(this.WriteResponse(
                       200,
                       (writer, writerSettings, responseMessage) =>
            {
                var targetVersion = writerSettings.Version.GetValueOrDefault();
                responseMessage.SetHeader("Location", ODataObjectModelConverter.BuildEntryUri(result, targetEntitySet, targetVersion).OriginalString);
                ResponseWriter.WriteEntry(writer.CreateODataResourceWriter(targetEntitySet), result, targetEntitySet, this.Model, targetVersion, Enumerable.Empty <string>());
            }));
        }