こんばんは。メイドさんを雇いたい男、しばやんです。
とある Web サービスを作るために、ドメインを取得してサブドメイン毎に機能を割り当てたいなー。と思ったので、ASP.NET MVC 2 で追加されたエリアを使って実現してみました。
まずはドメイン周りの設定を行います。今回、実際に割り当てたいサブドメインと機能は以下の通り。
- www.colorsapp.net
- トップページ
- widget.colorsapp.net
- ウィジェット周り
- snapshot.colorsapp.net
- スナップショット周り
ええ、ドメインからわかるように COLORS 向けのサービスを Azure で作ろうと企んでます。
それはいいとして、まずは DNS の設定を行って、さっきのサブドメインが Azure の *.cloudapp.net を指すようにします。
colorsapp.net ドメインはお名前.com で取ったので、専用の画面で設定を行いました。Azure の場合には CNAME を使って、別名を付ける形で設定します。これで全てのサブドメインにアクセスすると *.cloudapp.net が表示されるようになります。
さて、これからは MVC 側での作業です。まずは普通にエリアを追加しますが、このままだとドメインを関係なくルーティングが行われるので残念なことになります。
そこでググったら標準の Route を拡張した DomainRoute クラスとエリアで使うための拡張メソッドが見つかりました。
Parenting, programming, and the pursuit of happines: ASP.NET MVC Domain Routing and areas
これを使うと RegisterArea メソッドで定義されてるルーティングを書き直すだけで、ドメイン毎にエリアを切り替えることが出来ました。
実際に書いたコードはこんな感じ。
エリアとドメインでのルーティングの組み合わせは非常に自然ですね。