ASP.NET MVC および IIS 5
-
09-06-2019 - |
質問
ASP.NET MVC アプリケーションのホスティングを IIS 5 (6 または 7) で動作させるための最良の方法は何ですか。ASP.NET MVC アプリケーションを公開しようとすると、404 エラーが発生するだけのようです。少しグーグルで調べたところ、いくつかの解決策が見つかりましたが、どちらもあまり洗練されたものではないようで、アプリケーションの共有ホスティング環境を使用するようになったら、それらが使用できなくなるのではないかと心配しています。
- inetmgr.exe 上のアプリケーション仮想ディレクトリを右クリックします。
- [プロパティ] -> [仮想ディレクトリ] タブ -> [構成]。
- 新しいマッピング拡張機能を追加します。拡張機能は。*である必要があります。これは、実行可能ファイルc: windows microsoft.net framework v2.0.50727 aspnet_isapi.dll、またはコンピューターの適切な場所にマッピングされます(マッピングからこれをコピーできます。 .aspxファイル)。マッピングで「ファイルが存在するかどうかを確認」をチェックします。
- 3 X OK、準備完了です。
- 必要に応じて、この設定をすべての Web サイトに適用できます。ステップ1では、独自の仮想ディレクトリの代わりに「デフォルトのWebサイト」ノードをクリックし、ステップ2で[Home Directory]タブに移動します。残りは同じです。
すべてを ASP.NET 経由でルーティングするのは少し巧妙なようです。
URL に .mvc が含まれるように MVC ルーティングを編集し、この拡張子に基づいた解決策 1 の手順に従います。 編集:元の画像リンクは失われていますが、Google のキャッシュからのものです。
解決
答えは ここ
*.mvc拡張機能がホスティングに登録されていない場合、404例外が得られます。その場合、MVCアプリをホストする動作方法は、Global.ASAXルーティングのcaluseを次の方法で変更することです。
routes.add(new Route( "{controller} .mvc.aspx/{action}"、new mvcroutehandler()){defaults = new routevaluedictionary(new {controller = "yourcontroller"})});
このようにして、すべてのコントローラーリクエストは *.mvc.aspxになります。これはホスティングによって認識されます。また、MVC DLLがローカルビンにコピーされるため、特別なセッティングを行う必要はありません。
他のヒント
私は思う どちらの場合でも、解決策 1 を実行する必要があります。.
HTTP リクエスト パイプラインを考えてみましょう。
- リクエストが IIS に届きます。
- IIS はポート/ホスト ヘッダーをチェックして、そのホスト ヘッダー/ポートに対する要求をキャプチャするように設定された Web サイトがあるかどうかを確認します。
- IIS は、要求のファイル拡張子 (.php、.asp、.aspx) を調査し、その種類の要求を処理できる ISAPI にそれを渡します。
この時点で初めて ASP.NET (または PHP ランタイム) が起動します。 IIS にそのマッピングがない場合、要求は ASP.NET ランタイムに渡されず、要求はコードに到達しません。このため、グロブ (*) を ASP.NET ISAPI にマッピングする必要があります。
ASP.NET MVC フレームワークの URL は、ファイル拡張子がまったく付いていないことがよくあります。これらの要求を ASP.NET (またはその他のランタイム) で処理したい場合は、ファイル拡張子に関係なく、すべての要求をその ISAPI にマップする必要があります。aspnet_isapi.dll)。
これは、.jpg、.gif などのメディアを提供する必要がある HttpHandler に対しても行われることがよくあります。.jpg が「通常の」ASP.NET ファイル拡張子ではない場合でも、ハンドラーがヒットするには、ハンドラーがコードにマップされる必要があります。
HTH、
タイラー
走る:C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll -i
これにより、aspnet ユーザーの IIS レジストリ設定がリセットされます。
仮想ディレクトリを作成します。1.変換したいディレクトリを右クリックします
- プロパティを選択します
- [ディレクトリ] で [作成] を選択します。
- 「構成」で「追加」を選択します。
- 実行可能ファイルの挿入の場合:
C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll
エクステンションインサートの場合:.*
「ファイルの存在を確認する」のチェックを外します
[ドキュメント] の下にエントリ ポイント ファイルを追加します。つまり、次のようになります。Default.htm、index.htm、Global.asax
ディレクトリ設定の下
- 「編集...」を選択します。
- 匿名アクセスを選択します
- IIS によるパスワード制御を許可するのチェックを外します
- 基本認証のチェックを外します
- 統合 Windows 認証のチェックを外します
- ASP.NET では、バージョン = v4.0.30319 であることを確認してください。
ユーザー名をメモしてください。つまり:IUSR_AVSJ82S
物理ディレクトリの共有権限を設定します。
- Windows エクスプローラーで、仮想ディレクトリに変換された物理ディレクトリに移動します。ディレクトリ名を右クリックします
- プロパティを選択する
- 「セキュリティ」タブで「追加」を選択します
- IIS ユーザー名を入力します。つまり、次のようになります。IUSR_AVSJ82S 名前をクリックして確認します。
- 「OK」をクリックします
- 権限を読み取りと書き込みに設定します。
FYI:Server 2003(RPSに接続する必要があるアプリを開発する)では、拡張機能を追加することはできませんでした。*、ルート節を変更する代替ソリューションを使用しました。
コントローラー名の末尾に .aspx を追加してみましたか?
スタックオーバーフローの質問にはうまくいきました ASP.NET MVC ホスティングはどこで入手できますか?.