しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

Azure と MVC でドメインベースのルーティングを行ってみた

こんばんは。メイドさんを雇いたい男、しばやんです。

とある 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 クラスとエリアで使うための拡張メソッドが見つかりました。

ASP.NET MVC Domain Routing

Parenting, programming, and the pursuit of happines: ASP.NET MVC Domain Routing and areas

これを使うと RegisterArea メソッドで定義されてるルーティングを書き直すだけで、ドメイン毎にエリアを切り替えることが出来ました。
実際に書いたコードはこんな感じ。

エリアとドメインでのルーティングの組み合わせは非常に自然ですね。