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

 

この記事に星をつける

おすすめ度
スタイル

特集コンテンツ一覧

RESTlessnessに打ち勝つ

Matt McLarty 2019年3月13日 午前7時39分

.NET CLIクイックツアー

Jeremy Miller 2019年2月18日 午前1時55分

.NET CoreとDevOps

Dave Swersky 2019年2月6日 午後11時46分

こんにちは

コメントするには 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メールを変更すると確認のメールが配信されます。

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