しばやん雑記

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

ASP.NET MVC 3 の Web.config にある謎設定

みなさん、ASP.NET MVC 3 と Razor で開発してますかー?えっ、まだインストールすらしてない?
MVC 3 と Razor で開発するべきですよ。開発しなさい。開発して。開発しろ。か・い・は・つ・し・ろ。

と、某ヤンデレメガネみたいな五段活用はこのくらいにして本題。先日 ASP.NET MVC 3 Tools Update が公開されましたが、そのタイミングでプロジェクトテンプレートに含まれる Web.config に以下のような謎設定が増えていました。

<appSettings>
  <add key="webpages:Version" value="1.0.0.0"/>
  <add key="ClientValidationEnabled" value="false"/>
  <add key="UnobtrusiveJavaScriptEnabled" value="false"/>
</appSettings>

webpages:Version という名前から、おそらく WebPages (Razor) のバージョンが上がった時に互換性を保持するために追加されたんだろうと思います。WebPages のソースコードを読むと、指定されていない場合は最新バージョンとして処理されるようになっていました。

ということは、将来的にはそれなりに互換性が失われるような変更が行われるのかもしれないですね。それはそれで気になります。

実は webpages から始まる設定はもう一つあります。それは Views ディレクトリ内にある Web.config に以下のように記述されています。

<appSettings>
  <add key="webpages:Enabled" value="false" />
</appSettings>

webpages:Enabled という名前から WebPages の有効・無効を切り替えるための設定かと思ったんですが、WebPages の有効・無効ってなんだ?という話なので実際に切り替えて試しました。

webpages:Enabled = true の場合

トップページ


ビュー直接指定


webpages:Enabled = false の場合

トップページ


ビュー直接指定

スクリーンショットだけで一目瞭然ですね。

webpages:Enabled という設定はビューファイルへの直接アクセスを有効にするかどうかの設定というわけでした。一応 WebPages のソースコードを確認したところ、挙動の通り false の場合は直接アクセスを無視するようになっていました。

ASP.NET MVC 3 アプリではビューを直接表示されては困りますので、false にして 404 エラーを表示するようになっているわけです。つまりは WebMatrix などで WebPages を使ったアプリの場合は false にしてしまうと、正しく表示されなくなるので注意が必要です。