2016-11-24 56 views
0

首先,我有这个问题...的WebAPI的OData v4的操作

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

什么它已经奋战了一个小时左右已经得到了这么多...

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

经过我的许多困惑,以及对编译器/ OData框架关于什么是对与错以及生命的意义有很大的影响之后,我得出的结论是,这样做只是简化了OData以及简单的WebAPI方法。

今天的OData框架似乎太不成熟,缺乏执行一些更复杂任务的基本能力(特别是那些与查询无关的任务),这实际上很奇怪,因为它位于框架之上,可以处理这完美的罚款!

面向这个问题的其他人的建议... 如果OData失败,创建一个简单的WebAPI控制器,它只是不会让你失败!