コード例 #1
0
ファイル: DisableAtomTests.cs プロジェクト: zhonli/odata.net
        public void UpdateUsingAtomShouldBeFailed()
        {
            var entryWrapper = new ODataResourceWrapper()
            {
                Resource = new ODataResource()
                {
                    TypeName = NameSpacePrefix + "Person"
                },
                NestedResourceInfoWrappers = new List <ODataNestedResourceInfoWrapper>()
                {
                    new ODataNestedResourceInfoWrapper()
                    {
                        NestedResourceInfo = new ODataNestedResourceInfo()
                        {
                            Name         = "HomeAddress",
                            IsCollection = false
                        },
                        NestedResourceOrResourceSet = new ODataResourceWrapper()
                        {
                            Resource = new ODataResource()
                            {
                                TypeName   = NameSpacePrefix + "HomeAddress",
                                Properties = new[]
                                {
                                    new ODataProperty
                                    {
                                        Name  = "City",
                                        Value = "Chengdu"
                                    },
                                    new ODataProperty
                                    {
                                        Name  = "FamilyName",
                                        Value = "Tigers"
                                    }
                                }
                            }
                        }
                    }
                }
            };

            var settings = new ODataMessageWriterSettings();

            settings.BaseUri = ServiceBaseUri;
            var personType = Model.FindDeclaredType(NameSpacePrefix + "Person") as IEdmEntityType;
            var personSet  = Model.EntityContainer.FindEntitySet("People");

            var requestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri + "People(1)"));

            requestMessage.SetHeader("Content-Type", MimeTypes.ApplicationAtomXml);
            requestMessage.SetHeader("Accept", MimeTypes.ApplicationAtomXml);
            requestMessage.Method = "PATCH";

            using (var messageWriter = new ODataMessageWriter(requestMessage, settings, Model))
            {
                try
                {
                    var odataWriter = messageWriter.CreateODataResourceWriter(personSet, personType);
                    ODataWriterHelper.WriteResource(odataWriter, entryWrapper);
                }
                catch (Microsoft.OData.ODataContentTypeException)
                {
                    return;
                }
                Assert.IsTrue(false);
            }
        }
コード例 #2
0
ファイル: DisableAtomTests.cs プロジェクト: zhonli/odata.net
        public void PostUsingAtomShouldBeFailed()
        {
            var entryWrapper = new ODataResourceWrapper()
            {
                Resource = new ODataResource()
                {
                    TypeName   = NameSpacePrefix + "Person",
                    Properties = new[]
                    {
                        new ODataProperty {
                            Name = "PersonID", Value = 101
                        },
                        new ODataProperty {
                            Name = "FirstName", Value = "Peter"
                        },
                        new ODataProperty {
                            Name = "LastName", Value = "Zhang"
                        },
                        new ODataProperty
                        {
                            Name  = "Home",
                            Value = GeographyPoint.Create(32.1, 23.1)
                        },
                        new ODataProperty
                        {
                            Name  = "Numbers",
                            Value = new ODataCollectionValue
                            {
                                TypeName = "Collection(Edm.String)",
                                Items    = new string[] { "12345" }
                            }
                        },
                        new ODataProperty
                        {
                            Name  = "Emails",
                            Value = new ODataCollectionValue
                            {
                                TypeName = "Collection(Edm.String)",
                                Items    = new string[] { "*****@*****.**" }
                            }
                        }
                    }
                },
                NestedResourceInfoWrappers = new List <ODataNestedResourceInfoWrapper>()
                {
                    new ODataNestedResourceInfoWrapper()
                    {
                        NestedResourceInfo = new ODataNestedResourceInfo()
                        {
                            Name         = "HomeAddress",
                            IsCollection = false
                        },
                        NestedResourceOrResourceSet = new ODataResourceWrapper()
                        {
                            Resource = new ODataResource()
                            {
                                TypeName   = NameSpacePrefix + "HomeAddress",
                                Properties = new[]
                                {
                                    new ODataProperty
                                    {
                                        Name  = "Street",
                                        Value = "ZiXing Road"
                                    },
                                    new ODataProperty
                                    {
                                        Name  = "City",
                                        Value = "Chengdu"
                                    },
                                    new ODataProperty
                                    {
                                        Name  = "PostalCode",
                                        Value = "200241"
                                    },
                                    new ODataProperty
                                    {
                                        Name  = "FamilyName",
                                        Value = "Tigers"
                                    }
                                }
                            }
                        }
                    }
                }
            };

            var settings = new ODataMessageWriterSettings();

            settings.BaseUri = ServiceBaseUri;

            var personType = Model.FindDeclaredType(NameSpacePrefix + "Person") as IEdmEntityType;
            var peopleSet  = Model.EntityContainer.FindEntitySet("People");

            var requestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri + "People"));

            requestMessage.SetHeader("Content-Type", MimeTypes.ApplicationAtomXml);
            requestMessage.SetHeader("Accept", MimeTypes.ApplicationAtomXml);
            requestMessage.Method = "POST";
            using (var messageWriter = new ODataMessageWriter(requestMessage, settings, Model))
            {
                try
                {
                    var odataWriter = messageWriter.CreateODataResourceWriter(peopleSet, personType);
                    ODataWriterHelper.WriteResource(odataWriter, entryWrapper);
                }
                catch (Microsoft.OData.ODataContentTypeException)
                {
                    return;
                }
                Assert.IsTrue(false);
            }
        }
コード例 #3
0
ファイル: Serializer.cs プロジェクト: weitzhandler/odata.net
        /// <summary>
        /// Writes the body operation parameters associated with a ServiceAction. For each BodyOperationParameter:
        /// 1. calls ODataPropertyConverter  to convert CLR object into ODataValue/primitive values.
        /// 2. then calls ODataParameterWriter to write the ODataValue/primitive values.
        /// </summary>
        /// <param name="operationParameters">The list of operation parameters to write.</param>
        /// <param name="requestMessage">The OData request message used to write the operation parameters.</param>
        internal void WriteBodyOperationParameters(List <BodyOperationParameter> operationParameters, ODataRequestMessageWrapper requestMessage)
        {
            Debug.Assert(requestMessage != null, "requestMessage != null");
            Debug.Assert(operationParameters != null, "operationParameters != null");
            Debug.Assert(operationParameters.Any(), "operationParameters.Any()");

            using (ODataMessageWriter messageWriter = Serializer.CreateMessageWriter(requestMessage, this.requestInfo, true /*isParameterPayload*/))
            {
                ODataParameterWriter parameterWriter = messageWriter.CreateODataParameterWriter(null);
                parameterWriter.WriteStart();

                foreach (BodyOperationParameter operationParameter in operationParameters)
                {
                    if (operationParameter.Value == null)
                    {
                        parameterWriter.WriteValue(operationParameter.Name, operationParameter.Value);
                    }
                    else
                    {
                        ClientEdmModel model   = this.requestInfo.Model;
                        IEdmType       edmType = model.GetOrCreateEdmType(operationParameter.Value.GetType());
                        Debug.Assert(edmType != null, "edmType != null");

                        switch (edmType.TypeKind)
                        {
                        case EdmTypeKind.Collection:
                        {
                            this.WriteCollectionValueInBodyOperationParameter(parameterWriter, operationParameter, (IEdmCollectionType)edmType);
                            break;
                        }

                        case EdmTypeKind.Complex:
                        case EdmTypeKind.Entity:
                        {
                            Debug.Assert(model.GetClientTypeAnnotation(edmType).ElementType != null, "model.GetClientTypeAnnotation(edmType).ElementType != null");
                            ODataResourceWrapper entry = this.CreateODataResourceFromEntityOperationParameter(model.GetClientTypeAnnotation(edmType), operationParameter.Value);
                            Debug.Assert(entry != null, "entry != null");
                            var entryWriter = parameterWriter.CreateResourceWriter(operationParameter.Name);
                            ODataWriterHelper.WriteResource(entryWriter, entry);
                            break;
                        }

                        case EdmTypeKind.Primitive:
                            object primitiveValue = ODataPropertyConverter.ConvertPrimitiveValueToRecognizedODataType(operationParameter.Value, operationParameter.Value.GetType());
                            parameterWriter.WriteValue(operationParameter.Name, primitiveValue);
                            break;

                        case EdmTypeKind.Enum:
                            ODataEnumValue tmp = this.propertyConverter.CreateODataEnumValue(
                                model.GetClientTypeAnnotation(edmType).ElementType,
                                operationParameter.Value,
                                false);
                            parameterWriter.WriteValue(operationParameter.Name, tmp);

                            break;

                        default:
                            // EdmTypeKind.Row
                            // EdmTypeKind.EntityReference
                            throw new NotSupportedException(Strings.Serializer_InvalidParameterType(operationParameter.Name, edmType.TypeKind));
                        }
                    } // else
                }     // foreach

                parameterWriter.WriteEnd();
                parameterWriter.Flush();
            }
        }
コード例 #4
0
ファイル: Serializer.cs プロジェクト: weitzhandler/odata.net
        /// <summary>
        /// Writes collection value in body operation parameter.
        /// </summary>
        /// <param name="parameterWriter">The odata parameter writer.</param>
        /// <param name="operationParameter">The operation parameter.</param>
        /// <param name="edmCollectionType">The edm collection type.</param>
        private void WriteCollectionValueInBodyOperationParameter(ODataParameterWriter parameterWriter, BodyOperationParameter operationParameter, IEdmCollectionType edmCollectionType)
        {
            ClientEdmModel model = this.requestInfo.Model;

            var elementTypeKind = edmCollectionType.ElementType.TypeKind();

            if (elementTypeKind == EdmTypeKind.Entity || elementTypeKind == EdmTypeKind.Complex)
            {
                ODataWriter feedWriter = parameterWriter.CreateResourceSetWriter(operationParameter.Name);
                feedWriter.WriteStart(new ODataResourceSet());

                IEnumerator enumerator = ((ICollection)operationParameter.Value).GetEnumerator();

                while (enumerator.MoveNext())
                {
                    Object collectionItem = enumerator.Current;
                    if (collectionItem == null)
                    {
                        if (elementTypeKind == EdmTypeKind.Complex)
                        {
                            feedWriter.WriteStart((ODataResource)null);
                            feedWriter.WriteEnd();
                            continue;
                        }
                        else
                        {
                            throw new NotSupportedException(Strings.Serializer_NullCollectionParameterItemValue(operationParameter.Name));
                        }
                    }

                    IEdmType edmItemType = model.GetOrCreateEdmType(collectionItem.GetType());
                    Debug.Assert(edmItemType != null, "edmItemType != null");

                    if (edmItemType.TypeKind != EdmTypeKind.Entity && edmItemType.TypeKind != EdmTypeKind.Complex)
                    {
                        throw new NotSupportedException(Strings.Serializer_InvalidCollectionParameterItemType(operationParameter.Name, edmItemType.TypeKind));
                    }

                    Debug.Assert(model.GetClientTypeAnnotation(edmItemType).ElementType != null, "edmItemType.GetClientTypeAnnotation().ElementType != null");
                    ODataResourceWrapper entry = this.CreateODataResourceFromEntityOperationParameter(model.GetClientTypeAnnotation(edmItemType), collectionItem);
                    Debug.Assert(entry != null, "entry != null");
                    ODataWriterHelper.WriteResource(feedWriter, entry);
                }

                feedWriter.WriteEnd();
                feedWriter.Flush();
            }
            else
            {
                ODataCollectionWriter collectionWriter     = parameterWriter.CreateCollectionWriter(operationParameter.Name);
                ODataCollectionStart  odataCollectionStart = new ODataCollectionStart();
                collectionWriter.WriteStart(odataCollectionStart);

                IEnumerator enumerator = ((ICollection)operationParameter.Value).GetEnumerator();

                while (enumerator.MoveNext())
                {
                    Object collectionItem = enumerator.Current;
                    if (collectionItem == null)
                    {
                        collectionWriter.WriteItem(null);
                        continue;
                    }

                    IEdmType edmItemType = model.GetOrCreateEdmType(collectionItem.GetType());
                    Debug.Assert(edmItemType != null, "edmItemType != null");

                    switch (edmItemType.TypeKind)
                    {
                    case EdmTypeKind.Primitive:
                    {
                        object primitiveItemValue = ODataPropertyConverter.ConvertPrimitiveValueToRecognizedODataType(collectionItem, collectionItem.GetType());
                        collectionWriter.WriteItem(primitiveItemValue);
                        break;
                    }

                    case EdmTypeKind.Enum:
                    {
                        ODataEnumValue enumTmp = this.propertyConverter.CreateODataEnumValue(model.GetClientTypeAnnotation(edmItemType).ElementType, collectionItem, false);
                        collectionWriter.WriteItem(enumTmp);
                        break;
                    }

                    default:
                        // EdmTypeKind.Entity
                        // EdmTypeKind.Row
                        // EdmTypeKind.EntityReference
                        throw new NotSupportedException(Strings.Serializer_InvalidCollectionParameterItemType(operationParameter.Name, edmItemType.TypeKind));
                    }
                }

                collectionWriter.WriteEnd();
                collectionWriter.Flush();
            }
        }
コード例 #5
0
        private ODataResourceWrapper CreateVehicleGPS(bool postDeleteTypeInReferencingModel)
        {
            ODataResource newVehicleGPS = new ODataResource
            {
                TypeName = TestModelNameSpace + (postDeleteTypeInReferencingModel ? ".TruckDemo.DerivedVehicleGPSType" : ".GPS.VehicleGPSType")
            };

            var properties = new List <ODataProperty>
            {
                new ODataProperty
                {
                    Name  = "Key",
                    Value = "000"
                },
                new ODataProperty
                {
                    Name  = "VehicleSpeed",
                    Value = 999.9
                },
            };

            if (postDeleteTypeInReferencingModel)
            {
                properties.Add(new ODataProperty
                {
                    Name  = "DisplayName",
                    Value = "NewDisplayName"
                });
            }
            newVehicleGPS.Properties = properties;

            var newVehicleGPSWrapper = new ODataResourceWrapper()
            {
                Resource = newVehicleGPS,
                NestedResourceInfoWrappers = new List <ODataNestedResourceInfoWrapper>()
                {
                    new ODataNestedResourceInfoWrapper()
                    {
                        NestedResourceInfo = new ODataNestedResourceInfo()
                        {
                            Name         = "StartLocation",
                            IsCollection = false
                        },
                        NestedResourceOrResourceSet = new ODataResourceWrapper()
                        {
                            Resource = new ODataResource()
                            {
                                TypeName   = TestModelNameSpace + ".Location.GeoLocation",
                                Properties = new[]
                                {
                                    new ODataProperty
                                    {
                                        Name  = "Lat",
                                        Value = 99.9
                                    },
                                    new ODataProperty
                                    {
                                        Name  = "Long",
                                        Value = 88.8
                                    }
                                }
                            }
                        }
                    },
                    new ODataNestedResourceInfoWrapper()
                    {
                        NestedResourceInfo = new ODataNestedResourceInfo()
                        {
                            Name         = "EndLocation",
                            IsCollection = false
                        },
                        NestedResourceOrResourceSet = new ODataResourceWrapper()
                        {
                            Resource = new ODataResource()
                            {
                                TypeName   = TestModelNameSpace + ".Location.GeoLocation",
                                Properties = new[]
                                {
                                    new ODataProperty
                                    {
                                        Name  = "Lat",
                                        Value = 77.7
                                    },
                                    new ODataProperty
                                    {
                                        Name  = "Long",
                                        Value = 88.8
                                    }
                                }
                            }
                        }
                    },
                    new ODataNestedResourceInfoWrapper()
                    {
                        NestedResourceInfo = new ODataNestedResourceInfo()
                        {
                            Name         = "CurrentLocation",
                            IsCollection = false
                        },
                        NestedResourceOrResourceSet = new ODataResourceWrapper()
                        {
                            Resource = new ODataResource()
                            {
                                TypeName   = TestModelNameSpace + ".Location.GeoLocation",
                                Properties = new[]
                                {
                                    new ODataProperty
                                    {
                                        Name  = "Lat",
                                        Value = 88.8
                                    },
                                    new ODataProperty
                                    {
                                        Name  = "Long",
                                        Value = 88.8
                                    }
                                }
                            }
                        }
                    },
                    new ODataNestedResourceInfoWrapper()
                    {
                        NestedResourceInfo = new ODataNestedResourceInfo()
                        {
                            Name         = "Map",
                            IsCollection = false
                        },
                        NestedResourceOrResourceSet = new ODataResourceWrapper()
                        {
                            Resource = new ODataResource()
                            {
                                TypeName   = TestModelNameSpace + ".Map.MapType",
                                Properties = new[]
                                {
                                    new ODataProperty
                                    {
                                        Name  = "ProviderName",
                                        Value = "ProviderNew"
                                    },
                                    new ODataProperty
                                    {
                                        Name  = "Uri",
                                        Value = "NewUri"
                                    },
                                    new ODataProperty
                                    {
                                        Name  = "MBytesDownloaded",
                                        Value = 12.3
                                    }
                                }
                            }
                        }
                    },
                    new ODataNestedResourceInfoWrapper()
                    {
                        NestedResourceInfo = new ODataNestedResourceInfo()
                        {
                            Name         = "LostSignalAlarm",
                            IsCollection = false
                        },
                        NestedResourceOrResourceSet = new ODataResourceWrapper()
                        {
                            Resource = new ODataResource()
                            {
                                TypeName   = TestModelNameSpace + ".GPS.GPSLostSignalAlarmType",
                                Properties = new[]
                                {
                                    new ODataProperty
                                    {
                                        Name  = "Severity",
                                        Value = 1
                                    }
                                }
                            },
                            NestedResourceInfoWrappers = new List <ODataNestedResourceInfoWrapper>()
                            {
                                new ODataNestedResourceInfoWrapper()
                                {
                                    NestedResourceInfo = new ODataNestedResourceInfo()
                                    {
                                        Name         = "LastKnownLocation",
                                        IsCollection = false,
                                    },
                                    NestedResourceOrResourceSet = new ODataResourceWrapper()
                                    {
                                        Resource = new ODataResource()
                                        {
                                            TypeName   = TestModelNameSpace + ".Location.GeoLocation",
                                            Properties = new[]
                                            {
                                                new ODataProperty
                                                {
                                                    Name  = "Lat",
                                                    Value = 88.8
                                                },
                                                new ODataProperty
                                                {
                                                    Name  = "Long",
                                                    Value = 88.8
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            };

            return(newVehicleGPSWrapper);
        }