ASP.NET WebフォームからASP.NET MVCへの移行/共存特集:“Webフォーム+ASP.NET MVC”共存アプリ(4/4 ページ)

» 2013年08月05日 16時28分 公開
[熊家賢治,Sansan 株式会社(http://www.sansan.com/)]
前のページへ 1|2|3|4       

(6)URLの修正

 ここまでで筆者の事例を基にしたWebフォームからMVCへの移行/共存作業は完了だ。しかし、URLフォーマットがWebフォームとMVCで全く異なることに違和感を覚えた読者もいるかもしれない。そこで、最後に余談として、クライアント・ブラウザに表示されるURLをWebフォーム特有の「*.aspx」といった形から、よりユーザー・フレンドリなURLに書き換えることのできるオープンソースのライブラリ「UrlRewriter.NET」を紹介する。

●UrlRewriter.NET

 UrlRewriter.NETとは、クライアントがリクエストしたURLを、アプリケーション上で任意の形に書き換えることができるライブラリだ。同様の機能を持つものとして、有名なところではApacheの「mod_rewrite」モジュールや、IISの拡張モジュールである「URL Rewrite」などがある。

●UrlRewriter.NETの導入と設定

 UrlRewriter.NETのインストールはNuGetから(次に示すコマンドを使って)簡単に行える。

PM> Install-Package Intelligencia.UrlRewriter


リスト6 NuGetでのUrlRewriter.NETのインストール

●URL書き換えルールの設定

 インストールが完了したら、Web.configファイルにURL書き換えルールを次のとおりに設定する。

<configuration>
  <configSections>
  <section name="rewriter" requirePermission="false" type="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter" />
  </configSections>

  <system.web>
  ……省略……
   <httpModules>
    <add type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter" name="UrlRewriter" />
  </httpModules>
  </system.web>

  <rewriter>
    <rewrite url="~/About" to="~/About.aspx" />
    <rewrite url="~/Book/Index" to="~/List.aspx" />
  </rewriter>
</configuration>


リスト7 Web.configファイルにURL書き換えルールの設定

 ここでは、<rewrite>要素に書き換え対象とするURLの定義と、書き換え後のURLを設定している。例えば、

<rewrite url="~/Book/Index" to="~/List.aspx" />



という記述は、「http://yourdomain/Book/Index」へのリクエストを、内部的には「http://yourdomain/List.aspx」というURLにリクエストされたことにする、という設定だ。実際にこのURLにアクセスしてみると、書籍一覧画面(List.aspx)が表示されることが分かる。次の画面はVisual Studioからアプリケーションを実行した結果だ。アドレスバーに注目してほしい。

URL書き換え後の書籍一覧画面(List.aspx) 図6 URL書き換え後の書籍一覧画面

 実際のアプリケーションでURLの書き換えを行う場合はこのように単純にはいかないだろうが、UrlRewriter.NETで設定可能なURL書き換えルールは非常に柔軟なため、よほど複雑なURLを持つアプリケーションでなければ十分対応可能だろう。書き換えルールの詳細は公式のヘルプページで確認できる。

●IIS 7.5で動作させる

 では、アプリケーションをIIS 7.5に発行し、実際にアクセスしてみる。すると、次の画面のようなエラーが出るはずだ。

IISに発行してアクセスした結果 図7 IISに発行してアクセスした結果

 これは、IIS 6.0およびIIS 7.0のクラシック・モード、ASP.NET開発サーバーと、IIS 7.0以降の統合モードとで、HTTPモジュールの登録方法が異なるために発生しているエラーだ*7。UrlRewriter.NETはHTTPモジュールとしてURLの書き換えを実施しているため、動作させるためにはWeb.configファイルにさらに修正が必要となる(具体的には次のように修正する)。

<configuration>
  <configSections>
  <section name="rewriter" requirePermission="false" type="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter" />
  </configSections>

  <system.web>
  ……省略……
   <httpModules>
    <add type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter" name="UrlRewriter" />
  </httpModules>
  </system.web>

  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
      <add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter" />
    </modules>
    <validation validateIntegratedModeConfiguration="false" />
  </system.webServer>

  <rewriter>
    <rewrite url="~/About" to="~/About.aspx" />
    <rewrite url="~/Book/Index" to="~/List.aspx" />
  </rewriter>
</configuration>


リスト8 IIS7.0以降の統合モードで動作させる設定

 Web.configファイルを修正後、アプリケーションを発行して、再度アクセスすると正常に動作していることを確認できる(次の画面を参照)。

Web.configを修正して再びアクセス 図8 Web.configファイルを修正して再びアクセス

 ただし、<validation>要素のvalidateIntegratedModeConfiguration属性を無効にすると、IIS 7.0以降の統合モードでサポートしていない構成があったとしてもエラーが発生しなくなるため、プロダクション環境での利用は推奨されていない。開発時の利用にとどめるか、Visual Studio 2010以降を利用しているのであればWeb.configファイルをデバッグ時とリリース時で異なる構成にする対応を行うべきだ。

*7 詳細については、MSDNの「ASP.NET と IIS 7 の統合」を確認してほしい。


まとめ

 ASP.NET MVCの登場によってASP.NET開発には今、大きな変化が起こっている。Webフォームでの開発がなくなるとは思わないが、これから新しいアプリケーションを作成するときの主流はMVCになっていくだろう。

 一方で、すでにWebフォームで構築して保守フェイズに入っているアプリケーションでも将来的な移行を前提にピンポイントでMVCを採用することも、多少の手間を掛ければ可能であることを本稿で示した。「昔に作られたシステムだから」とあきらめるようなことはせず、移行や共存などでコストを最小限に抑えつつ新しい技術を積極的に利用するようにしたい。

「特集:“Webフォーム+ASP.NET MVC”共存アプリ」のインデックス

特集:“Webフォーム+ASP.NET MVC”共存アプリ

前のページへ 1|2|3|4       

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。