2016-11-01 4 views
0

Cette fonction OData ne désérialise pas le paramètre de modèle du corps. Il désérialise comme null comme vu de la réponse. Existe-t-il un support pour les paramètres FromBody dans OData V4?Fonction OData V4 Paramètre FromBody

ConfigV1.cs

builder.Function("CreateTestModel").Returns<TestModel>(); 
var edmModel = builder.GetEdmModel() 
config.MapODataServiceRoute("ODataRouteV1", "v1", edmModel); 

TestController.cs

using System; 
using System.ComponentModel.DataAnnotations; 
using System.Linq; 
using System.Net; 
using System.Net.Http; 
using System.Web.Http; 
using System.Web.OData; 
using System.Web.OData.Query; 
using System.Web.OData.Routing; 

public class TestController : ODataController 
    [HttpPost] 
    [ODataRoute("CreateTestModel")] 
    public TestModel CreateTestModel([FromBody]TestModel model) 
    { 
     return model; 
    } 
} 

TestModel.cs

public class TestModel 
{ 
    public string Value { get; set; } 
} 

Demande

POST /v1/CreateTestModel HTTP/1.1 
Host: localhost:8090 
Content-Type: application/json 
Cache-Control: no-cache 
Postman-Token: 4810cdc0-d92b-b7b5-4328-8b87e0222854 

{ 
    "Value": "test" 
} 

Réponse

{ 
    "@odata.context":"http://localhost:8090/V1/$metadata#Edm.Null","@odata.null":true 
} 

Répondre

1

OData fonctions doivent être appelées avec un HTTP GET et ne devraient pas affecter le serveur. Votre méthode ici CreateTestModel sonne comme si elle affecterait le serveur, donc je dirais que c'est probablement plus adapté à une action OData. Cela peut sembler ne pas être pertinent, mais je pense que cela résoudra votre problème car les Actions sont configurées pour avoir des paramètres dans le corps alors que les Fonctions obtiennent généralement des paramètres de l'URL