WebAPI OData v4操作

时间:2016-11-24 09:24:32

标签: c# asp.net-web-api odata

首先,我有这个问题......

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,无论我从初始化模型时如何声明它。

1 个答案:

答案 0 :(得分:0)

在经历了很多困惑之后,我对编译器/ OData框架非常粗略地讲述了什么是对错,以及生命的意义,我得出的结论是,这简单易于用OData和简单的WebAPI方法完成。

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

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