この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 16017|答える: 1

[.NET Core] ASP.NET コアにおけるカスタムルーティング制約の実装

[リンクをコピー]
掲載地 2019/05/06 9:30:30 | | |
ルーティング制約

ASP.NET Coreでは、ルーティングテンプレートを定義することでURL上の変数を渡し、変数のデフォルト、オプション、制約を提供できます。

制約は、指定された制約名を属性ルートに追加することで使用されます。そのルートは次のように使われます。

フレームワーク内には以下のいくつかの制約がすでに提供されています。

制約
試合の例
説明
知力
{id:int}
123456789, -123456789
任意の整数をマッチさせる
ブール
{active:bool}
真、偽
真偽の一致(大文字区別)
デートタイム
{dob:datetime}
2016-12-31、2016-12-31 29:32
有効なDateTime値と一致(固定局所内 - 警告参照)
小数点
{価格:十進数}
49.99, -1,000.01
有効な小数点の値に一致します(固定局所性 - 警告参照)
ダブル
{重さ:倍}
1.234, -1,001.01e8
有効なダブル値と一致します(固定局所性において - 警告参照)
浮き上がる
{weight:float}
1.234, -1,001.01e8
有効なfloat値にマッチします(固定局所性の場合 - 警告参照)
ガイド
{id:guid}
CD2C1638-1638-72D5-1638-DEADBEEF1638、{CD2C1638-1638-72D5-1638-DEADBEEF1638}
有効なGUID値に一致します
長い
{チクタク:ロング}
123456789, -123456789
有効なロング値と一致します
minlength(値)
{username:minlength(4)}
リック
文字列は少なくとも4文字でなければなりません
maxlength(値)
{ファイル名:maxlength(8)}
リチャード
文字列は8文字を超えてはなりません
長さ(長さ)
{filename:length(12)}
somefile.txt
文字列は正確に12文字でなければなりません
長さ(最小、最大)
{filename:length(8,16)}
somefile.txt
文字列は最低8文字、最大16文字でなければなりません
最小(値)
{年齢:min(18)}
19
整数値は少なくとも18でなければなりません
max(value)
{年齢:max(120)}
91
整数値は120を超えてはなりません
範囲(最小、最大)
{年齢:範囲(18,120)}
91
整数値は少なくとも18で120を超えてはなりません
アルファ
{name:alpha}
リック
文字列は1つ以上のアルファベット文字(a-z、大文字を区別)で構成されなければなりません。
正述式(表現)
{ssn:regex(^\d{{3}}-\d{{2}}-\d{{4}}$)}
123-45-6789
文字列は正則表現と一致しなければなりません(正則表現の定義に関するヒントを参照)
必須
{名前:必須}
リック
URL生成時にノンパラメトリックな値の存在を強制するために使用されます


組み込みの制約はほとんどの一般的なユースケースで機能しますが、時には望む効果をカスタマイズする必要がある場合もあります。
カスタムルーティング制約

カスタム制約として、IRouteConstraintインターフェースを実装し、4つのパラメータを持つMatchメソッドをオーバーロードする方法があります。

最初のパラメータであるhttpContextは、現在のリクエストのコンテキストです

2つ目のパラメータであるルートは、現在の制約が属するルートです

3つ目のパラメータであるrouteKeyは、記事冒頭の例にあるidのように、現在チェックされている変数の名前です
4つ目のパラメータ値は、現在のURLが対応する辞書値であり、例えば記事冒頭の例のルートなどです。URLがusers/1の場合、キー = id 、value = 1 の辞書が存在します。 もちろん、コントローラーやアクションなどの他の変数の値もあります。

5番目のパラメータであるrouteDirectionは、URLがウェブから要求されたのか、Url.Actionのようなメソッドで生成されるのかを示す列挙された値です。

例えば、ルートで渡されるパラメータが指定された列挙値でなければならない制約を定義したいです。

まずはenumを定義しましょう:


次に、制約を定義します:

ConfigureServicesメソッドにカスタム制約を追加Startup.cs:
ルートの制約を用いる:

(WebApplicationTestは現在の名前空間です)


{id:int:min(2)} ルートは min(2) を使用しなければならず、そうでなければ id = 0 または id = 1 で競合が発生します。

プログラムを実行し、ルートがapi/test/0、api/test/1、api/test/true、api/test/falseのときにカスタム制約に合わせます。

ルートがapi/test/{整数より大きい2}なら、2つ目のルートにマッチします。

他のケースは三つ目のルートに当てはまる。

結論

ルーティング制約は一部のシナリオで非常に有用な機能であり、コントローラ内のチェックパラメータを削減できます。部分パラメータ検証の機能は宣言的アトリュービュートを用いて実装でき、一部の重複チェックは制約に抽出して公開利用可能です。

制約のコンストラクタは注入可能で、非常に拡張性が高く、データベースをクエリすることでパラメータ検証も可能です。

公式ウェブサイトではルーティング制約について簡単にしか言及されていませんが、この記事ではルーティング制約の具体的な用例を示しています。





先の:ゼロファウンデーション C#(フルカラー版)トゥモローテクノロジー
次に:ASP.NET Core – Razor View インポート 使用説明
 地主| 掲載地 2019/05/06 9:32:15 |
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com