1

以下は、コントローラーの get メソッドです。ブール値の「success」、文字列「message」、およびリストを含む JSON を返します。OData を使用してリストをクエリするにはどうすればよいですか? 通常、戻り値の型が IQueryable の場合、次のように動作します api/Category/all?$top=5 toトップ 5 を取得する....しかし、私の場合はどうすればよいですか?

// Get all Categories
    [HttpGet]
    [ActionName("all")]
    [Queryable]
    public HttpResponseMessage GetCategoryList()
    {          

        var categoryList = this.Repository.GetCategories().AsQueryable<Category>();

        return Request.CreateResponse(HttpStatusCode.OK, new ResponseMessage<IQueryable<Category>> { success = true, data = categoryList });

    }

public class ResponseMessage<T>  where T: class
{
    public string message;

    public bool success;

    public T data;
}
4

2 に答える 2

1

あなたが提供した詳細では、ソリューションはodata formatを利用しているようです。つまり、あなたが言及したクエリ構文をサポートする ODATA プロバイダーは、ここでは使用されていません。そのため、ページング シナリオを自分で処理する必要があります。

その機能を提供する予定のライブラリ Microsoft ASP.NET Web API OData 0.2.0-alpha がありますが、まだアルファ版です。

アクション パラメータにクエリ文字列 ID と同じ名前を付けることで、クエリ文字列をアクション パラメータにバインドできます。そのため、アクションを変更するGetCategoryList(int top)ことで、パラメーターの最上位パラメーターの値を取得できるようになります。次の X のシナリオも処理する必要があります。

于 2012-11-19T14:55:28.440 に答える
1

ODataQueryOptions<T>問題を解決するために使用できます。コードは次のようになります。

[HttpGet]
[ActionName("all")]
public HttpResponseMessage GetCategoryList(ODataQueryOptions<Category> options)
{          

    var categoryList = this.Repository.GetCategories().AsQueryable<Category>();
    categoryList = options.ApplyTo(categoryList) as IQueryable<Category>;

    return Request.CreateResponse(HttpStatusCode.OK, new ResponseMessage<IQueryable<Category>> { success = true, data = categoryList });

}

ODataQueryOptions は、QueryableAttribute と同じように機能する必要があります。

于 2012-11-19T23:12:46.940 に答える