2017-05-30 11 views
0

ASP.NET Web API OData(v4)でSPATIAL PROPERTYを使用してエンティティをPOSTする正しい方法は何ですか?ASP.NET Web API OData(v4)SPATIAL PROPERTYを使用したエンティティでのPOST

GETでのシリアル化はうまく動作しますが、POSTで試行したすべてがモデルをnullにします。

POSTはまったくサポートされていますか?

ありがとうございます。

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

答えて

0

以下の記事を読んだ後に可能です。 oDataActionParameters型をポストへの入力として使用し、後でメソッドで必要な型にキャストする必要があります。

public async Task<IHttpActionResult> RateProduct(ODataActionParameters parameters) 

例と、この

+0

おかげで深いダイビングのチェックこのlinkを:Mehtod署名は、以下のようなものでしょう。バインディングは、アクションを使用する場合は空間タイプで機能し、空間タイプは「第1レベル」パラメータです。アクションのパラメータがPlaceで、空間タイプがPlaceのプロパティであった場合、動作しません。その行動の説明は何ですか?シリアライゼーションは正常に動作し、デシリアライゼーションは機能しません。あなたが言及した記事はそれを直接扱っていません。 –

関連する問題