我已经实现了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?
由于
答案 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