ダリンの回答は常に最高品質ですが、この質問は、検索、ページング、フィルタリングをAPIで実際に実行する方法と、最新バージョンのWeb API(v2)を使用して実行する方法を説明する回答から実際に恩恵を受けます。
これは、この問題に関する優れたリソース(テクノロジーに依存しない)と私が考える投稿です: http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api
Darinの回答はかなり古いため、回答にはASP.NET WebAPIv2の新機能も反映されている必要があります。
「asp.netwebapisearch」をグーグル検索すると、この質問が一番上に表示されるので、ここでいくつかのことを説明しようと思います。
最新バージョンのASP.NETWebAPI(v2)でRESTの原則にできるだけ近づけるには、最新バージョンで導入された属性ルーティングを真剣に検討する必要があります。古い、従来の、コンベンションベースのルーティング(global.asax.csまたはRouteConfig.cs)でRESTfulルーティングを実現することは非常に困難です。
詳細については、こちらを
ご覧くださいhttp://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2
さて、あなたが尋ねる詳細を実装する方法の詳細に入る。
最も一般的な方法は、クエリ文字列パラメータを介してこれらのタイプの機能を公開することです。
RESTの原則に従い、たとえば、顧客リソース用に1つのエンドポイントが必要です。
/api/customers
これを実現するには、Web APIコントローラーでGetCustomers()アクションを次のように装飾します。
[HttpGet]
[Route("/api/customers")]
public HttpResponseMessage GetCustomers(string q="", string sortBy="", string sortDirection="", bool active=true, ...)
{
// q = being optional search query
// sortBy = optional sort by column/property
// sortDirection = optional sort direction
// active = filter on 'active' column/property
// ... other filters may be applicable
}
フィルター処理されたビューを提供する場合は、このアクションを従来のMVCで行った操作に厳密に実装します。
一部のカスタムエッジケースでは、本当に必要な場合にのみ、新しいコントローラーとカスタムアクションを導入します。
SearchFilterの強く型付けされたオブジェクトに関するコメントに関して、デフォルトのモデルバインダーはGETリクエストを使用するときにこのクラスにバインドされないため、これはそのままでは機能しないことを説明しましょう。
したがって、これらのプロパティをSearchFilterクラスから取り出してアクション自体に配置し、クエリ文字列バインダーを介してバインドする[FromBody]
か、リクエスト本文からバインドする場合はバインダーを使用します。http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-apiによる
HTH