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);
}
}
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. –