首先,我有这个问题......
WebApi OData v4 ComlexType cannot have an 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);
}
}
已经与它争斗了n个小时左右,我已经走到了这一步......
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的代码? 此时将任何内容置于Ok()内部会导致框架返回406,无论我从初始化模型时如何声明它。
答案 0 :(得分:0)
在经历了很多困惑之后,我对编译器/ OData框架非常粗略地讲述了什么是对错,以及生命的意义,我得出的结论是,这简单易于用OData和简单的WebAPI方法完成。
今天的OData框架似乎太不成熟,缺乏执行一些更复杂的任务(特别是那些与查询无关的任务)的基本能力,这真的很奇怪,因为它位于一个可以构建的框架之上处理这个完全没问题!
面对这个问题的其他人的建议...... 如果OData失败了,请创建一个简单的WebAPI控制器,它只是不会让您失望!