ASP.NET Web APIルーティングとは、簡単に言えば、クライアントのリクエストを対応するアクションにマッピングするプロセスです。 「ASP.NET Web API Practice Series 03, Routing Templates, Routing Conventions, Routing Settings」という記事では、テンプレート、コンベンション、HTTPメソッドを通じてルートを設定することを体験しましたが、この方法の利点はルーティングテンプレートがWebApiConfigクラスのApp_Startフォルダ内に均一に配置され、管理に便利であることですが、欠点は柔軟性が十分にないことです。
RESTはすべてをリソースとして扱い、時にはCustomerやOrdersのような子リソースを持つリソースがcustomers/1/ordersのようなリクエストを入力したい場合もありますが、慣例だけではこのルートを実現するのは難しいです。 実際、ASP.NET Web APIにはRoute機能があり、Actionと直接接続でき、非常に柔軟で直感的に使いやすいです。
MVC4のルート機能の使い方を体験 ASP.NET。
ルート属性を許可する
まずWebApiConfigで設定する必要があります。
上記のMapHttpAttributeRoutesメソッドは、ASP.NET Web APIの新しいバージョンでのみ利用可能ですもしバージョンが比較的低い場合は、古いバージョンをアンインストールして、NuGetパッケージマネージャーコンソールから最新バージョンをインストールすることができます。
次に、Global.asaxでWebApiConfigの元の登録方法をコメントアウトし、新しい方法を採用する必要があります。以下の通りです:
この時点で、プロジェクトを実行している際に以下のエラーが報告されることがあります:
これは、ASP.NET Web APIの最新バージョンをダウンロードする際に、icrosoftの最新バージョンも同時にダウンロードしていたためです。 AspNet.WebApi.HelpPage。 HelpPageの最新バージョンをアンインストールして、古いバージョンをダウンロードできます。
Uninstall-package Microsoft.AspNet.WebApi.HelpPage –Force Install-Package Microsoft.AspNet.WebApi.HelpPage -pre
ルートプロパティを活用してください
Cusomterクラスを作成してください。
オーダークラスを作成しましょう。
Orderコレクションを取得するためにデータベースクラスを作成します。
空のAPIコントローラーを作成します。
ブラウザで以下を入力してください:
開発に ASP.NET MVC4を使用している場合、プログラムを初めて実行した際に以下のエラーが出ることがあります。
[A]System.Web.WebPages.Razor.Configuration.HostSection は [B]System.Web.WebPages.Razor.Configuration.HostSection にキャストできません。 タイプAは「System.Web.WebPages.Razor, version=2.0.0.0, culture=neutral, PublicKeyToken=31bf3856ad364e35」(「C:/Windows/Microsoft.Net/assembly/GAC_MSIL/」文脈「Default」の文脈で)から派生しています。 System.Web.WebPages.Razor/v4.0_2.0.0.0__31bf3856ad364e35/System.Web.WebPages.Razor.dll")。 タイプBは「System.Web.WebPages.Razor, version=3.0.0.0, culture=neutral, PublicKeyToken=31bf3856ad364e35」(文脈では「C:/Windows/Microsoft.NET/Framework/v4.0.30319/」の「Default」)から派生しています Temporary ASP.NET Files/vs/feb7ce97/a525d58a/asse
これは、ASP.NET Web APIの最新バージョンをダウンロードする際にRazorの最新バージョンを使用しているためです。 Web.configのルートディレクトリで以下の設定を設定する必要があります:
RoutePrefix機能を使う
APIコントローラーですべてのアクションをプレフィックスに付けたい場合は、APIコントローラーにRoutePrefix機能を付けることができます。
例えば、私たちはこのような形式にしたいです:http://localhost/api/customers/1/orders
このようにOrdersControllerを修正してください。
また、ルート機能で~を使ってアクションの接頭辞ルールを上書きすることもできます。
RoutePrefix機能で定義されるプレフィックスには、パラメータ変数も含まれます:
ルーティング制約
ルート内のパラメータ変数は「{パラメータ変数名:constraint}」で制約できます。
上記のように、フラグメント変数idがint型であれば最初のアクションにルーティングされ、そうでなければ2番目のアクションにルーティングされます。
ASP.NET Web APIの組み込み制約には以下が含まれます:
{x:alpha} は大文字と小文字の文字を制約します {x:bool} {x:datetime} {x:十進数} {x:ダブル} {x:float} {x:guid} {x:int} {x:length(6)} {x:length(1,20)} は長さの範囲を制約します {x:long} {x:maxlength(10)} {x:min(10)} {x:range(10,50)} {x:正則式(正則式)}
パラメータ変数に対して同時に複数の制約を設定できます:
制約ルールをカスタマイズするためにIHttpRouteConstraintインターフェースを実装してください。 0になり得ない制約を実装します。
App_Startフォルダ内のWebApiConfigでカスタム制約を登録します。
カスタム制約を使いましょう。
オプションパラメータとそのデフォルト値
ルーティングパラメータ変数が任意の場合、そのパラメータにもデフォルト値が与えられなければなりません。
制約の後に?を追加してオプションを示し、メソッドパラメータでidのデフォルト値を設定します。
ルートの名前を決めましょう
ルーティングの優先度
ルートプロパティによって設定されるルート優先度は、慣例とRouteOrderプロパティに基づいて決定されます。
慣例は以下の通りです:
1. 静的フラグメント変数 2. 制約を持つフラグメント変数 3. 制約のない断片変数 4. 制約を持つワイルドカードフラグメント変数 5. 制約のないワイルドカード断片変数
RouteOrderプロパティのデフォルト値は0であり、プロパティ値が小さいほど高くなります。
上記のルーティングの優先順位は以下の通りです:
orders/detailsのstatic fragment変数、RouteOrderプロパティの値は0です RouteOrderプロパティで0の制約を受けたフラグメント変数を持つorders/{id} orders/{customerName}は制約のないフラグメント変数であり、RouteOrderプロパティの値は0です orders/{*date}はRouteOrderプロパティで値が0のワイルドカードフラグメント変数です 注文/保留中のルート命令プロパティ値が1の場合
|