趣味は車輪の再発明♪

ASP.NETのMVCアプリがHTTP 403になる場合の対処法



ASP.NETのMVC2アプリケーションを、Visual StudioのWeb発行の機能を使ってIISに発行すると 「HTTP 403 ― ページの表示を拒否されました~ログインが必要~」 というエラーが出る場合があります。何度か同じ現象でハマっているので書いておきます。

現象

MVCを利用したASP.NETのプロジェクトを、Visual StudioからWeb発行して、ページを表示しようとすると、 HTTP 403が発生します。ブラウザには以下のようなメッセージが表示されています。

Web サイトによってこのページの表示を拒否されました
この Web サイトを表示するにはログインが必要です。

当然ログインが必要な設定ではありません。

原因

どうやらこれは、拡張子のないリクエストが実行ファイルへマッピングされていないのがマズイらしい。 MVCの利用によって、URLから、コントローラー名とアクション名が決定されなければならないのだけど、 その処理を行うためのマッピング情報が無いので、IISとしては、動きようがないってことらしい。

対処

これを解決するには、アプリケーションの構成に、マッピングの情報を追加します。 すなわち、すべての拡張子('.*')を aspnet_isapi.dllへマッピングするのですね。 しかし、この追加作業の中で、また別の(Windows XpとIIS5.1の組み合わせだけの現象らしいが)難解なトラップが仕掛けられていますのであわせて書いておきます。

マッピングの追加手順は、

  1. [管理ツール]>[インターネット インフォメーション サービス]を表示
  2. Webアプリのプロパティを開き、[仮想ディレクトリ]タブの[構成(G)]ボタンを押して[アプリケーションの構成]ダイアログを表示。
  3. [マッピング]タブの[追加(D)]ボタンを押して[アプリケーションの拡張子マッピングの追加/編集]ダイアログを表示。
  4. [実行ファイル(X)]にC:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dllを指定、 [拡張子(E)]に.*を入力。 [すべての動詞(A)]ラジオボタンを選択して[OK]ボタンを押せば。。。。 ん?なぜ押せない(-"-;)

普通の操作では最後の手順で[アプリケーションの拡張子マッピングの追加/編集]ダイアログの[OK]ボタンがグレイアウトしていて押せないです。

原因は、実行ファイルのテキストボックスに長いパスが入力されていると縮小表示されるのだが(コンパクト表示とか何とか)、実はこれがバグっておるということで。 マイクロソフトさんも完全にバグと認めているようだが、直すつもりはないらしいです。

[OK]ボタンを押せるようにするには、実行ファイルのパス部分をいったん切り取って、拡張子のタブをクリックする。 あとは切り取ったパスを貼り付け直す。ちなみに「切り取り」と「貼り付け」の操作はマウス操作でヨロシクどうぞ([Ctrl]+[x]や[Ctrl]+[v]は効かない((( ̄へ ̄井))。

環境

この記事は、以下の環境で検証したものです。

  • Web Server : IIS 5.1
  • IDE : Visual Studio 2010 ASP.NET MVC2使用
  • OS : Windows xp Service Pack 3


RSS Feed Widget
ASP.NETのMVCアプリがHTTP 403になる場合の対処法
(http://bicycle.life.coocan.jp/takamints/index.php/techtips/aspnetmvc403)
by Koji Takami ( email: vzg03566@gmail.com, GitHub: takamin )