2

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

值必须大于或等于 1。 参数名称:value 实际值为 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 时列表是空的而不是抛出错误?

谢谢

4

2 回答 2

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);
}

然后处理空/空结果客户端,或者你可以做>>这个

即当 count > 0 时,只需序列化 ODataResult<> 并将其作为 Stream 返回,当 count 为 0 时,您返回 ODataResult 的硬编码字符串表示形式(计数为零)等。它不是那么漂亮,但它可以工作。

于 2012-11-26T09:36:18.120 回答
0

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

于 2012-11-28T01:32:38.393 回答