public static IDictionary <string, object> ReadODataBody(ModelBindingContext bindingContext) { ODataActionPayloadDeserializer deserializer = bindingContext.HttpContext.Request.GetSubServiceProvider().GetService <ODataActionPayloadDeserializer>(); if (deserializer == null) { return(null); } ODataDeserializerContext context = BuildDeserializerContext(bindingContext); HttpRequest request = bindingContext.HttpContext.Request; var body = request.HttpContext.Features.Get <Http.Features.IHttpBodyControlFeature>(); if (body != null) { body.AllowSynchronousIO = true; } IODataRequestMessage oDataRequestMessage = ODataMessageWrapperHelper.Create(request.Body, request.Headers); IEdmModel model = request.GetModel(); using (var messageReader = new ODataMessageReader(oDataRequestMessage, null, model)) { var result = deserializer.Read(messageReader, typeof(ODataActionParameters), context); return(result as ODataActionParameters); } }
public void Read_ThrowsArgumentNull_MessageReader() { // Arrange ODataActionPayloadDeserializer deserializer = new ODataActionPayloadDeserializer(_deserializerProvider); // Act & Assert ExceptionAssert.ThrowsArgumentNull( () => deserializer.Read(messageReader: null, type: typeof(ODataActionParameters), readContext: new ODataDeserializerContext()), "messageReader"); }
public void Read_ThrowsArgumentNull_ReadContext() { // Arrange ODataActionPayloadDeserializer deserializer = new ODataActionPayloadDeserializer(_deserializerProvider); ODataMessageReader messageReader = ODataTestUtil.GetMockODataMessageReader(); // Act & Assert ExceptionAssert.ThrowsArgumentNull( () => deserializer.Read(messageReader, typeof(ODataActionParameters), readContext: null), "readContext"); }
public void Read_Throws_SerializationException_ODataPathMissing() { // Arrange ODataActionPayloadDeserializer deserializer = new ODataActionPayloadDeserializer(_deserializerProvider); ODataMessageReader messageReader = ODataTestUtil.GetMockODataMessageReader(); // Act & Assert ExceptionAssert.Throws <SerializationException>( () => deserializer.Read(messageReader, typeof(ODataActionParameters), readContext: new ODataDeserializerContext()), "The operation cannot be completed because no ODataPath is available for the request."); }