BT

InfoQ ホームページ ニュース ASP.NET Web APIのODataでQueryable APIにバリデーションを適用する

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

ブックマーク

原文(投稿日: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 の使い方をカスタマイズするような、高度なシナリオでクエリバリデーションを説明している。

 

この記事に星をつける

おすすめ度
スタイル

特集コンテンツ一覧

C# 8の非同期ストリーム

Bassam Alugili 2018年10月11日 午前3時13分

こんにちは

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

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

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

コミュニティコメント

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

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

BT

あなたのプロファイルは最新ですか?プロフィールを確認してアップデートしてください。

Eメールを変更すると確認のメールが配信されます。

会社名:
役職:
組織規模:
国:
都道府県:
新しいメールアドレスに確認用のメールを送信します。このポップアップ画面は自動的に閉じられます。