Asp.net web api Web API ODataResult总是序列化到Atom
我将从new返回一个ODataResult,如下所示:Asp.net web api Web API ODataResult总是序列化到Atom,asp.net-web-api,odata,Asp.net Web Api,Odata,我将从new返回一个ODataResult,如下所示: public ODataResult<Product> Get(ODataQueryOptions options) { var results = (options.ApplyTo(_db.Products) as IQueryable<Product>); var count = results.Count; var limitedResults = results.Take(100).ToArra
public ODataResult<Product> Get(ODataQueryOptions options)
{
var results = (options.ApplyTo(_db.Products) as IQueryable<Product>);
var count = results.Count;
var limitedResults = results.Take(100).ToArray();
return new ODataResult<Product>(results,null,count);
}
public ODataResult Get(ODataQueryOptions选项)
{
var结果=(options.ApplyTo(_db.Products)为可查询的);
var count=results.count;
var limitedResults=results.Take(100).ToArray();
返回新的ODataResult(结果、null、计数);
}
上述方法非常有效,但无论查询类型如何,它都会返回Atom响应。如何返回JSON
我可以看到Atom是ODataMediaTypeFormatter集合中第一个受支持的媒体类型。我很乐意完全删除Atom支持,因为我不需要它。更好的做法是正确协商内容类型。您是否尝试过设置accept标头,如下所示: Accept=application/json;odata=冗长 这应该返回JSON。
OData协议支持JSON已有一段时间了,但在协议应用程序的V3中/JSON被映射到一个名为JSON light的东西(尚未实现)。因此,在支持JSON light获取JSON之前,您必须更具体一点,并请求更详细的JSON版本,该版本自V1以来一直在OData中。我目前也在使用您链接的Beta包试验OData支持。我们应该记住,它是一个测试包,在发布之前可能会发生变化。我碰到了同样的问题。现在,微软似乎正计划在Web Api中提供OData v3支持,看看ODataMediaTypeFormatter就会发现这一点 在OData v3中,将有三种格式:
- Atom(
)应用程序/Atom+xml
- JSON详细(
)application/JSON;odata=Verbose
- JSON灯(
)application/JSON;odata=Light
application/json;odata=verbose
和应用程序/atom+xml
标题或回退到atom。有趣的是,指定$format=json
似乎会返回一个值
如果您想要一个临时解决方案,假设light格式将是详细格式的一个适当子集,那么您可以指示MediaTypeFormatter响应应用程序/json
请求,使使用jQuery中的OData变得更加容易,因为我们可以指定accept标头:
ODataMediaTypeFormatter odataFormatter = new ODataMediaTypeFormatter(model);
odataFormatter.SupportedMediaTypes.Add(MediaTypeHeaderValue.Parse("application/json"));
非常感谢。我在这上面花了太长时间。我缺少accept头的odata=verbose部分。你能让它与JSON一起工作吗?我这辈子都不能把上面的东西还给伯爵?它只返回结果,不进行计数。