2017-05-30 76 views
0

在ASP.NET Web API OData(v4)上使用SPATIAL PROPERTY发布实体的正确方法是什么?ASP.NET Web API OData(v4)使用空间属性在实体上发布

GET上的序列化工作正常,但我在POST中尝试的所有内容都会导致模型为空。

是否支持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类型作为帖子的输入,然后在您的方法中将其转换为所需的类型。 Mehtod签名将类似下面:

public async Task<IHttpActionResult> RateProduct(ODataActionParameters parameters) 

检查这个link有关示例和深潜这个

+0

感谢。当使用动作时,绑定对空间类型起作用,而空间类型是“第一级”参数。如果该操作的参数是一个地方,并且空间类型是该地点的属性,则不起作用。这种行为的解释是什么?序列化工作正常,反序列化不行。你提到的文章并不直接处理这个问题。 –

相关问题