C# 带有空列表(零计数)的OData结果将导致错误
我已经实现了OData来查询API生成的列表。但有时列表是空的,OData结果应该只返回一个空json,但它不返回。相反,它抛出以下错误 值必须大于或等于1。参数名称:值实际值为0 这是我的控制器方法C# 带有空列表(零计数)的OData结果将导致错误,c#,asp.net,asp.net-web-api,odata,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(ODataQuer
// 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);
}
//按Id获取状态
[HttpGet]
[ActionName(“GetStatesByID”)]
公共ODataResult GetStatesByID(ODataQueryOptions选项,int id)
{
var states=this.Repository.GetAllStatesByCountry(id).AsQueryable();
var结果=(options.ApplyTo(states)为可查询);
长计数=states.count();
返回新的ODataResult(结果、null、计数);
}
每当列表为空时,我可以将计数设置为0,这不会引发错误,但这确实不是一个好的做法,因此我想知道是否还有其他解决方法,以便ODataResult在列表为空时返回空json,而不是引发错误
谢谢由于我没有当前的环境,所以我没有机会测试此功能,但请尝试一下:
[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);
}
[HttpGet]
[ActionName(“GetStatesByID”)]
公共ODataResult GetStatesByID(ODataQueryOptions选项,int id)
{
var states=this.Repository.GetAllStatesByCountry(id)
.AsQueryable();
长计数=states.count();
如果(计数=0)
返回null;
var结果=(options.ApplyTo(states)为可查询);
返回新的ODataResult(结果、null、计数);
}
然后处理空/空结果客户端,或者您可以执行>>:
也就是说,当count>0时,只需序列化ODataResult并将其作为流返回;当count为0时,返回ODataResult的硬编码字符串表示形式(计数为零),等等。虽然不太美观,但可以工作。这是ODataResult类中的一个错误。对应的codeplex bug位于ya,可以工作,但是客户端guyz要求一些一致性,因为所有其他API都以json格式返回,其中包含“count”和“items”,其中包含列表。有没有一种方法可以让我保留这种格式,并将count和items都作为null发送,而不仅仅是发送null?我看到了一些帖子,它们与您遇到的问题相同,即这是ODataResult类的一个限制。也许您可以这样做,即当count>0时,只需序列化ODataResult并将其作为流返回(请参阅链接),当count为0时,返回ODataResult的硬编码字符串表示形式(计数为零),等等。虽然没有那么漂亮,但它可以工作