6

(シングルページアプリ)BigShelfサンプルで遊んでいます。私が本当に興味深いと思ったのは、GetBooksForSearchメソッド(/ api / BigShelf / GetBooksForSearch)であり、コントローラーコードには存在しない、結果のページングとフィルタリングのために追加の、、、パラメーターを取り$filterます$inlinecount$top$skip

public IQueryable<Book> GetBooksForSearch
    (string profileIds, Sort sort, bool sortAscending)

そのコントローラーが後で結果を変換してフィルター処理する方法、さらに重要なことに、そのような動作を構成する方法(たとえば、最大結果を制限する方法)についてのドキュメントは見つかりませんでしたが、誰かが手がかりを持っていますか?

- 更新しました -

MVCWebAPIがそのトリックを実行していることがわかりました。しかし、どうすればそれを構成できますか?

4

4 に答える 4

14

ResultLimitAttributeが削除されたようです。このコミットを参照してください

これは、ODataサポートに現在必要とされている[Queryable]属性の機能に組み込まれました。ここでの議論を参照してください

適切な使用法は次のようになります

[Queryable(ResultLimit = 10)]

[アップデート]

RTMの時点で、QueryableのResultLimit機能は削除されました。また、[Queryable]は独自のプレビューパッケージに移動されました。詳細についてはこのブログ投稿を、新しい使用法の手順についてはこの投稿を参照してください。

[UPDATE 2 11-16-12] ASP.Net Fall 2012 Update Previewで、物事が再び更新されました。[Queryable]属性のResultLimitプロパティがODataパッケージに追加されました。

いくつかの変更の概要については、こちらの記事を参照してください。

これが更新されたNugetパッケージです。これを書いている時点では、それはPREVIEWパッケージです。

于 2012-08-14T19:41:46.493 に答える
11

返されるデータの量を制限したり、ResultLimitAttribute返すアクション メソッドで使用できるアクション フィルター属性が呼び出されます。IQueryable<T>IEnumerable<T>

[ResultLimit(100)]
public IQueryable<Product> Get() {
    // ...
}
于 2012-02-21T17:21:48.093 に答える
3

MVC Web API を使用したページングとクエリに関する短い Web キャストがあり、ここで見ることができます。

どちらかでページングを実行する方法について説明します

  • OData クエリ構文を使用します。この場合、Web API が自動的に解釈して結果を取得します。
  • または、パラメータとして と を受け取り、要求されたアイテム数を返す独自のメソッドを作成しpageIndexますpageSize

私の知る限り、最初の方法を使用して返されるアイテムの最大数を構成することはできませんが、2 番目の方法を使用して返されるアイテムの数を制限し、if (pageSize>maxPage) then return maxPage items.

于 2012-02-21T09:08:11.743 に答える
1

コーディ・クラークが指摘したように、この地域は時間の経過とともにかなりの数の変化を遂げてきました。5.2 バージョンの WebAPIでは、 orではなく and パラメーターEnableQueryAnnotationを使用するようになりました。(まだ動作しますが、古いものとしてマークされています。) 現在、次の構文を使用します。PageSizeQueryableAttributeResultLimit[Queryable]

[EnableQuery(PageSize = 20, MaxTop = 20)]
public IQueryable<Product> Get() {
    // ...
}

を使用してPageSize、パラメータ化されていないリクエストのデフォルトのページ サイズを設定します。値を含めないMaxTopと、不正なクライアントが上限を非常に高い値に設定し、ページのデフォルトをバイパスする可能性があります。ではMaxTop、API がサポートするよりも多くのレコードをクライアントが要求すると、例外がスローされます。

于 2014-09-09T03:27:03.643 に答える