WebAPI OData v4 Actions



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

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控制器,它根本不会使您失败!

最新更新