【问题标题】:WebAPI OData v4 ActionsWebAPI OData v4 操作
【发布时间】:2016-11-24 09:24:31
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    在我对编译器/OData 框架关于什么是对什么错以及生活的意义感到非常困惑之后,我得出的结论是,这只是通过 OData 和简单的 WebAPI 方法更简单地完成。

    现在的 OData 框架似乎太不成熟,缺乏执行一些更复杂任务(尤其是那些与查询无关的任务)的基本能力,这真的很奇怪,因为它位于一个框架之上,可以处理得很好!

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

    【讨论】:

      猜你喜欢
      • 2016-02-27
      • 2015-04-10
      • 2015-11-06
      • 2014-07-26
      • 1970-01-01
      • 2016-11-02
      • 1970-01-01
      • 1970-01-01
      • 2013-06-13
      相关资源
      最近更新 更多