2017-04-11 16 views
2

私は[HttpGet]というWebAPIメソッドGetCats()を持っていて、Catオブジェクトのコレクションを返します。複雑なパラメータをGETリクエストに渡す

ページネーションを許可するために、パラメータskiptakeを追加しました。

しかし、要求が増加し、複雑なフィルタリングの可能性があります。たとえば、"PropertyName", "Value", "Type"という形式のフィルタのコレクションの場合です。 "CatName", "Mittens", "EqualTo"、フォーマットは"PropertyName", "Direction"などのフィルタを並べ替えます。 "CatAge", "Descending"

Skip and Takeも必要です。

このフィルタオブジェクトを構築すると、かなり大きく複雑になる可能性があります。その結果、と思われません。なぜなら、複数のフィルタがある場合は、特にそれらをグループ化する方法が必要になるため、QueryStringに配置することが可能です。

私は解決策を探しています - 私は[HttpPost]を使用してフィルタをポストすることができますが、HTTPメソッドでは間違っているようです。私は何らかの形でオブジェクトをクエリ文字列にエンコードし、それを正常にデコードすることができるかどうかはわかりません。

誰でもこの修正を提案できますか?私は、複雑なパラメータをGETに渡してデータのコレクションを取得するのが一般的な問題でなければならないと考えています。

+0

はい、クエリ文字列に絶対に複雑なオブジェクトを渡すことができます。デフォルトでは、WebAPIはクエリーのオブジェクトを取得し、本文のオブジェクトを取得します。そして、はい、あなたのURLが容量に達すると、いつでも複雑なオブジェクトを投稿できます。 –

答えて

2

私はあなたが最も実用的なクエリのケースのための定期的なクエリパラメータに固執できると思います。

デフォルトのクエリ文字列の制限は、IISでは2048です。これはデフォルトで40〜100個の個別のクエリ文字列パラメータに対してかなり長く、名前を短くしておくとさらに多くなります。必要に応じてそれを増やすこともできます - IIS Request Limits

パラメータが複雑な場合は、JSONおよび単一のクエリパラメータとして変換できます。

イデオロギーの異論(「RESTインターフェイスでなければなりません」など)や技術的な理由がない限り(キャッシングが必要で、CDNがPOSTリクエストのキャッシュを許可しないなど)、パラメータの送信に間違いはありません。あるいは、GETに固執したいなら、ヘッダーにもっと多くのパラメーターを入れることができます(しかし、それは非常にハッキリで、あなたにはあまり購入しません)。

+0

私はJSONがクエリ文字列に入る方法だと思います。オブジェクトのコレクションを渡している場合の問題は、それらをクエリ文字列に入れてラップを解除する方法です。 'GetCats?あなたはカスタム解析することができますが、MVCがすべての名前/フィルタ/値のクエリーストリングを分割することができるとは思いません(重複があると思います)カスタム値プロバイダなどを作成せずにフィルタのコレクションに入れることができます。ありがとう。リクエストの制限についても知っておいてください - 私は気付きませんでした。 – NibblyPig

0

GETリクエストでこれを行う方法はクエリーストリングです。

すでに述べたように、POSTリクエストの場合、データは本体に渡すことができます。

非正統的な方法は、HTTPヘッダーを使用してそのような情報を送信することですが、これはいくつかの純粋主義者とうまくあいません!また、いくつかのネットワークでは手間がかかるかもしれません。

あなたのデザインでは、作品と受け入れ可能なものとのバランスを見出すことができます。

関連する問題