2017-05-30 1 views
0

Was ist der richtige Weg, eine Entität mit einer RAUM-EIGENTUM auf ASP.NET-Web-API OData (v4) zu POST?ASP.NET-Web-API OData (v4) POST auf Entität mit RAUM-EIGENSCHAFT

Serialisierung bei GET funktioniert gut, aber alles, was ich im POST versuche, bewirkt, dass das Modell null wird.

Wird POST überhaupt unterstützt?

Vielen Dank im Voraus.

public class PlacesController : ODataController 
{ 
    [HttpGet] 
    [EnableQuery] 
    public virtual async Task<IHttpActionResult> Get([FromODataUri] string key) 
    { 
     var place = new Place() 
     { 
      Id = Guid.NewGuid().ToString(), 
      Location = GeographyPoint.Create(1, 1) 
     }; 

     return Ok(place); 
    } 

    [HttpPost] 
    [EnableQuery] 
    public virtual async Task<IHttpActionResult> Post(Place place) 
    { 
     if (place == null) 
     { 
      return BadRequest(); 
     } 

     if (!ModelState.IsValid) 
     { 
      return BadRequest(ModelState); 
     } 

     return Created(place); 
    } 
} 

    [DataContract] 
public class Place 
{ 
    [DataMember] 
    public string Id 
    { 
     get; 
     set; 
    } 

    [DataMember] 
    public GeographyPoint Location 
    { 
     get; 
     set; 
    } 
} 

    public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     config.MapHttpAttributeRoutes(); 

     var edmBuilder = new ODataConventionModelBuilder(); 

     edmBuilder.EntitySet<Place>("Places"); 

     var model = edmBuilder.GetEdmModel(); 

     config.MapODataServiceRoute(routeName: "ODataRoute", routePrefix: "api", model: model); 
    } 
} 

Antwort

0

Nach dem Durchlesen der unten genannten Artikel scheint es möglich. Sie müssen den oDataActionParameters-Typ als Eingabe für den Post verwenden und später in Ihrer Methode in den erforderlichen Typ umwandeln. Mehtod Unterschrift wird so etwas wie unten:

public async Task<IHttpActionResult> RateProduct(ODataActionParameters parameters) 

Überprüfung dieses link für Beispiele und tiefen Tauchgang auf dieser

+0

Dank. Die Bindung funktioniert bei Verwendung einer Aktion mit räumlichen Typen, und der räumliche Typ ist ein Parameter der "ersten Ebene". Wenn der Parameter der Aktion ein Ort war und der räumliche Typ eine Eigenschaft des Ortes war, funktioniert er nicht. Was ist die Erklärung für dieses Verhalten? Serialisierung funktioniert gut und Deserialisierung nicht. Der Artikel, den Sie erwähnt haben, befasst sich nicht direkt damit. –

Verwandte Themen