miso_soup3 Blog

主に ASP.NET 関連について書いています。

ASP.NET WEB API QueryStringを使った検索

QueryString でたくさんの検索条件を指定する API の例です。
パラメータを指定しない場合は、初期値を設定したいものとします。

api/persons/?
	canCook=true &
	isHungry=false &
	Name=taro &.....

という URL で検索したい場合もあれば、

api/persons/?canCook=true

という URL で、指定しないパラメータは null で検索できるようにしたい、
というものです。

動かない・良くない例

↑ 引数が Null 許容なので一見動きそうですが、
全ての QueryString (または URL の一部)
を指定しないと、このアクションメソッドへはマッピングされません。

↑ こんな感じで用意すれば一応目的は達成できますが、面倒過ぎます。

動く例

動く例1

↑ このようにC# の機能を利用して、オプション引数を持てば、実現できます。

動く例2

↑ 他にも、検索パラメータのクラスを作成して、
[FromUri] 属性をつけることでも実現できます。

でも。。。

でも、SearchParameter クラスを使った動く例2では、
ヘルプページ機能(0.3.0-rc)をそのまま使うと、各パラメータを表示してくれません。
表示させるには、カスタマイズする必要があります。
(本当はその実装を載せたかったのですが、できませんでした…orz)

が! 動く例2では、検証属性を使うことができます。

検索条件が制限付きって良くあるのでしょうか・・・。

カスタマイズの件は Reflection を使えばできそうですが、
WEB API のソースに似たような処理が無いか探し中です・・・。