首先,我有这个问题...
Webapi Odata v4 comlexType不能具有EntityType
...弄清楚"那是垃圾,但也许我可以解决它。"我想我可能会试图告诉odata我只是返回一根字符串,而json自己序列化对象...
这是我想做的
var acptBatch = Builder.EntityType<ProposedOffer>().Collection.Action("AcceptBatch");
acptBatch.Parameter<bool>("asSingleTransaction");
acptBatch.Parameter<string>("perspective");
acptBatch.ReturnsCollection<ValidationResult<ProposedOffer>>();
[HttpPost]
[ODataRoute("AcceptBatch({asSingleTransaction},{perspective})")]
public async Task<IHttpActionResult> AcceptBatch([FromUri]bool asSingleTransaction, [FromUri]string perspective, [FromBody]ICollection<int> offerIds)
{
try
{
var p = (Perspective)Enum.Parse(typeof(Perspective), perspective);
var result = await Service.AcceptOffers(asSingleTransaction, offerIds, p);
return Ok(result);
}
catch (Exception ex)
{
return await Failed(ex);
}
}
与它战斗了一个小时左右,我已经走了这么远...
var acptBatch = Builder.EntityType<ProposedOffer>().Collection.Action("AcceptBatch");
acptBatch.Parameter<bool>("asSingleTransaction");
acptBatch.Parameter<string>("perspective");
[HttpPost]
[ODataRoute("AcceptBatch({asSingleTransaction},{perspective})")]
[Route("ProposedOffer/AcceptBatch({asSingleTransaction},{perspective})")]
public async Task<IHttpActionResult> AcceptBatch([FromUri]bool asSingleTransaction, [FromUri]string perspective)
{
try
{
var offerIds = JsonConvert.DeserializeObject<ICollection<int>>(await Request.Content.ReadAsStringAsync());
var p = (Perspective)Enum.Parse(typeof(Perspective), perspective);
var result = await Service.AcceptOffers(asSingleTransaction, offerIds, p);
return Ok();
}
catch (Exception ex)
{
return await Failed(ex);
}
}
有人有任何想法,我如何将结果恢复到客户端的基于JavaScript的代码?在这一点
在我感到非常困惑之后,并与编译器/ODATA框架有关对与错的框架和生活的含义,我得出的结论是,这更简单地做到了。ODATA和简单的WebAPI方法。
看来,今天的ODATA框架还不成熟,缺乏执行一些更复杂的任务(尤其是与查询无关的任务)的基本能力,这确实很奇怪,因为它坐在一个可以可以的框架上处理这个很好!
建议其他面临这个问题的人...如果ODATA使您失败,请创建一个简单的WebAPI控制器,它根本不会使您失败!