BT

ASP.NET Web APIのODataでQueryable APIにバリデーションを適用する

| 作者: Anand Narayanaswamy フォローする 0 人のフォロワー , 翻訳者 編集部N フォローする 0 人のフォロワー 投稿日 2013年3月6日. 推定読書時間: 3 分 |

原文(投稿日:2013/02/27)へのリンク

 

ASP.NETのWeb APIのODataでは、下に示すように、Queryable APIの助けを借りて特定のアクション用のODataクエリシンタックスを使用することができる。

[Queryable]   
public IQueryable<WorkItem> Get(int projectId)


しかし、もしあなたの組織外にクエリ可能なアクションを公開しするなら、クエリバリデーションの助けを借りて、保護層を追加することで、サービスを保護すべきである。 Microsoftの Program Managerである Hongmei Ge氏は、最近 Queryable APIで、バリデーションを適用できる、様々なシナリオを検討した。

氏によって指摘された最初のシナリオは、下に示すように AllowedQueryOptionsと呼ばれるプロパティを使って、$top と $skipを持つクエリだけを許すのである。

[Queryable(AllowedQueryOptions = AllowedQueryOptions.Skip | AllowedQueryOptions.Top)]
public IQueryable<WorkItem> Get(int projectId)

MaxTop と MaxSkipプロパティを使って、$top と $skipの値を100と200に制限できる。

[Queryable(MaxTop = 100)]
public IQueryable<WorkItem> Get(int projectId)


[Queryable(MaxSkip = 200)]
public IQueryable<WorkItem> Get(int projectId)


AllowedOrderbyPropertiesを使って、結果をIdプロパティによって並び替えられる。なぜなら任意のプロパティによる並び替えは、遅い可能性がある。

[Queryable(AllowedOrderByProperties = "Id")]
public IQueryable<WorkItem> Get(int projectId)


もしあなたのクライアントが$filter内で Equal比較を使っているなら、AllowedLogicalOperatorsを使ってそれを検証すべきである。

[Queryable(AllowedLogicalOperators = AllowedLogicalOperators.Equal)]
public IQueryable<WorkItem> Get(int projectId)


AllowedArithmeticOperators の値をNoneにセットすれば、$filter で算術演算をオフすることができる。

[Queryable(AllowedArithmeticOperators = AllowedArithmeticOperators.None)]
public IQueryable<WorkItem> Get(int projectId)


AllowedFunctionsプロパティを使って、$filterにおける関数の使い方を制限できる。

[Queryable(AllowedFunctions = AllowedFunctions.StartsWith)]
public IQueryable<WorkItem> Get(int projectId)


上記のコードは、StartsWith関数だけが$filterで使えることを意味している。

氏はまた、$skip, $top, $orderby, $filterに対するデフォルトのバリデーションロジックやクエリをバリデートするためにODataQueryOptions の使い方をカスタマイズするような、高度なシナリオでクエリバリデーションを説明している。

 

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

特集コンテンツ一覧

ASP.NET Core - シンプルの力

Chris Klug 2018年6月4日 午前3時26分

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT