2

API によって生成されたリストを照会するために OData を実装しました。ただし、リストが空で、OData Result が空の 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 にすることができ、それはエラーをスローしませんが、それは実際には良い習慣ではありません。エラーをスローするのではなく、リストが空ですか?

ありがとう

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

次に、空の/null結果のクライアント側を処理します。代わりに、>>これを行うこともできます:

つまり、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 に答える