首先我有个问题..。
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,无论我如何声明它,只要根据我所能知道的来初始化模型。
发布于 2016-11-24 13:53:57
在我对编译器/ OData框架进行了大量的混淆之后,我得出了这样的结论:在OData之外,在简单的WebAPI方法中,这个wass更简单。
现在的OData框架似乎太不成熟了,缺乏执行一些更复杂的任务(特别是那些与查询无关的任务)的基本能力,这真的很奇怪,因为它位于一个能够很好地处理这些任务的框架之上!
给面临这个问题的人的建议..。如果OData失败了,创建一个简单的WebAPI控制器,它就是不会让你失望!
https://stackoverflow.com/questions/40782360
复制相似问题