【发布时间】:2017-08-09 00:40:18
【问题描述】:
我有一个 Web API 服务器,我在其中使用 ODATA(和 EF 6)返回项目列表(由使用绑定到其 GridControl 的 DevExpress ODataInstantFeedbackSource 的 WinForms 客户端使用)。
这是返回 Items 列表的 Web API 控制器方法:
public IHttpActionResult GetItems(ODataQueryOptions<Item> queryOptions)
{
var customerNumber = Request.Headers.GetValues("CustomerNumber").FirstOrDefault();
try
{
queryOptions.Validate(_validationSettings);
var query = queryOptions.ApplyTo(Context.Items) as IQueryable<Item>;
var items = query.AsEnumerable().Select(i => new Item()
{
ItemNumber = i.ItemNumber,
ItemDescription = i.ItemDescription,
<snip>
RebateAmount = RebateUtil.CalculateInstantRebates(i.ItemNo, customerNumber),
}).AsQueryable();
return Ok(items);
}
catch (ODataException ex)
{
return BadRequest(ex.Message);
}
}
在我升级到 ODATA v3 之前,上述工作正常;升级后,我现在得到:
ObjectContent1 类型未能序列化响应正文 内容类型 "text/plain; charset=utf-8", type 的值 “System.Linq.EnumerableQuery1[[AcmeService.Model.Item, AcmeService.Model,版本=1.0.0.0,文化=中性, PublicKeyToken=null]]" 无法转换为原始字符串。
我在 HTTP 响应正文中看到了上述消息(状态 500)。请求网址为:http://acme.us/odata/Items/$count
请注意,如果我让 GetItems 控制器简单地执行“返回 Ok(Context.Items)”,它可以正常工作(没有错误,但我需要能够在返回数据之前设置 RebateAmount 值)。
我做错了什么?
【问题讨论】:
标签: c# .net entity-framework asp.net-web-api odata