带有空列表的OData结果(零计数)会导致错误

时间:2012-11-26 09:05:34

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

我已经实现了OData来查询我的API生成的列表。但有时候列表是空的,OData结果应该只返回一个空的json,但它没有。相反,它会引发以下错误

值必须大于或等于1.参数名称:值实际值为0.

这是我的控制器方法

 // Get states by Id
    [HttpGet]
    [ActionName("GetStatesByID")]    
    public ODataResult<DataAccess.Model.State> GetStatesByID(ODataQueryOptions options,int id)
    {

        var states = this.Repository.GetAllStatesByCountry(id).AsQueryable<DataAccess.Model.State>();

        var results = (options.ApplyTo(states) as IQueryable<DataAccess.Model.State>);


        long count = states.Count();

        return new ODataResult<DataAccess.Model.State>(results, null, count);

    }

只要列表为空,我就可以将计数设为0并且不会产生错误,但这确实不是一个好习惯,所以我想知道是否还有其他解决方法,以便ODataResult返回一个当列表为空而不是抛出错误时,清空json?

由于

2 个答案:

答案 0 :(得分:1)

我没有机会测试这个,因为我没有当前的环境,但试一试:

[HttpGet]
[ActionName("GetStatesByID")]    
public ODataResult<DataAccess.Model.State> GetStatesByID(ODataQueryOptions options,int id)
{
    var states = this.Repository.GetAllStatesByCountry(id)
                                .AsQueryable<DataAccess.Model.State>();

    long count = states.Count();

    if(count == 0)
      return null;

    var results = (options.ApplyTo(states) as IQueryable<DataAccess.Model.State>);

    return new ODataResult<DataAccess.Model.State>(results, null, count);
}

然后处理空/ null结果客户端,或者你可以执行&gt;&gt; this

即。当计数&gt; 0只是序列化ODataResult&lt;&gt;并将其作为Stream返回,当count为0时,返回ODataResult的硬编码字符串表示(计数为零)等。它不是很漂亮但可以工作。

答案 1 :(得分:0)

这是ODataResult类中的一个错误。相应的codeplex错误位于http://aspnetwebstack.codeplex.com/workitem/640