C# ASP.NET Web API OData(v4)在具有空间属性的实体上发布
在ASP.NET Web API OData(v4)上发布具有空间属性的实体的正确方法是什么 GET上的序列化工作正常,但我在文章中尝试的所有操作都会导致模型变为null 支持POST吗 提前谢谢C# ASP.NET Web API OData(v4)在具有空间属性的实体上发布,c#,asp.net-web-api2,odata,asp.net-web-api-odata,C#,Asp.net Web Api2,Odata,Asp.net Web Api Odata,在ASP.NET Web API OData(v4)上发布具有空间属性的实体的正确方法是什么 GET上的序列化工作正常,但我在文章中尝试的所有操作都会导致模型变为null 支持POST吗 提前谢谢 public class PlacesController : ODataController { [HttpGet] [EnableQuery] public virtual async Task<IHttpActionResult> Get([FromOData
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);
}
}
公共类PlacesController:ODataController
{
[HttpGet]
[启用查询]
公共虚拟异步任务Get([FromODataUri]字符串键)
{
变量位置=新位置()
{
Id=Guid.NewGuid().ToString(),
Location=GeographyPoint.Create(1,1)
};
返回Ok(地点);
}
[HttpPost]
[启用查询]
公共虚拟异步任务发布(地点)
{
if(place==null)
{
返回请求();
}
如果(!ModelState.IsValid)
{
返回请求(ModelState);
}
创建的返回(地点);
}
}
[数据合同]
公共课场所
{
[数据成员]
公共字符串Id
{
得到;
设置
}
[数据成员]
公共地理点位置
{
得到;
设置
}
}
公共静态类WebApiConfig
{
公共静态无效寄存器(HttpConfiguration配置)
{
config.maphttpAttribute路由();
var edmBuilder=新ODataConventionModelBuilder();
edmBuilder.EntitySet(“地点”);
var model=edmBuilder.GetEdmModel();
config.MapODataServiceRoute(routeName:“ODataRoute”,routePrefix:“api”,model:model);
}
}
在阅读了下面提到的文章之后,这似乎是可能的。您需要使用oDataActionParameters类型作为post的输入,稍后在方法中将其转换为所需类型。方法签名如下所示:
public async Task<IHttpActionResult> RateProduct(ODataActionParameters parameters)
公共异步任务速率产品(ODataActionParameters)
在阅读了下面提到的文章之后,请查看下面的示例并深入了解这篇文章,这似乎是可能的。您需要使用oDataActionParameters类型作为post的输入,稍后在方法中将其转换为所需类型。方法签名如下所示:
public async Task<IHttpActionResult> RateProduct(ODataActionParameters parameters)
公共异步任务速率产品(ODataActionParameters)
查看此示例并深入了解此谢谢。当使用动作时,绑定对空间类型有效,并且空间类型是“第一级”参数。如果动作的参数是一个地点,而空间类型是该地点的一个属性,则它不起作用。对这种行为的解释是什么?序列化工作正常,而反序列化则不行。你提到的那篇文章没有直接涉及这一点。谢谢。当使用动作时,绑定对空间类型有效,并且空间类型是“第一级”参数。如果动作的参数是一个地点,而空间类型是该地点的一个属性,则它不起作用。对这种行为的解释是什么?序列化工作正常,而反序列化则不行。你提到的那篇文章没有直接涉及这一点。