質問

ASP.NET MVC アプリケーションのホスティングを IIS 5 (6 または 7) で動作させるための最良の方法は何ですか。ASP.NET MVC アプリケーションを公開しようとすると、404 エラーが発生するだけのようです。少しグーグルで調べたところ、いくつかの解決策が見つかりましたが、どちらもあまり洗練されたものではないようで、アプリケーションの共有ホスティング環境を使用するようになったら、それらが使用できなくなるのではないかと心配しています。

解決策 1

  1. inetmgr.exe 上のアプリケーション仮想ディレクトリを右クリックします。
  2. [プロパティ] -> [仮想ディレクトリ] タブ -> [構成]。
  3. 新しいマッピング拡張機能を追加します。拡張機能は。*である必要があります。これは、実行可能ファイルc: windows microsoft.net framework v2.0.50727 aspnet_isapi.dll、またはコンピューターの適切な場所にマッピングされます(マッピングからこれをコピーできます。 .aspxファイル)。マッピングで「ファイルが存在するかどうかを確認」をチェックします。
  4. 3 X OK、準備完了です。
  5. 必要に応じて、この設定をすべての Web サイトに適用できます。ステップ1では、独自の仮想ディレクトリの代わりに「デフォルトのWebサイト」ノードをクリックし、ステップ2で[Home Directory]タブに移動します。残りは同じです。

すべてを ASP.NET 経由でルーティングするのは少し巧妙なようです。

解決策 2

URL に .mvc が含まれるように MVC ルーティングを編集し、この拡張子に基づいた解決策 1 の手順に従います。 編集:元の画像リンクは失われていますが、Google のキャッシュからのものです。

alt text

役に立ちましたか?

解決

答えは ここ

*.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 リクエスト パイプラインを考えてみましょう。

  1. リクエストが IIS に届きます。
  2. IIS はポート/ホスト ヘッダーをチェックして、そのホスト ヘッダー/ポートに対する要求をキャプチャするように設定された Web サイトがあるかどうかを確認します。
  3. 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.変換したいディレクトリを右クリックします

  • プロパティを選択します
    1. [ディレクトリ] で [作成] を選択します。
    2. 「構成」で「追加」を選択します。
    3. 実行可能ファイルの挿入の場合:

C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll

エクステンションインサートの場合:.*

  • 「ファイルの存在を確認する」のチェックを外します

  • [ドキュメント] の下にエントリ ポイント ファイルを追加します。つまり、次のようになります。Default.htm、index.htm、Global.asax

  • ディレクトリ設定の下

    1. 「編集...」を選択します。
    2. 匿名アクセスを選択します
    3. IIS によるパスワード制御を許可するのチェックを外します
    4. 基本認証のチェックを外します
    5. 統合 Windows 認証のチェックを外します
    6. ASP.NET では、バージョン = v4.0.30319 であることを確認してください。

ユーザー名をメモしてください。つまり:IUSR_AVSJ82S

物理ディレクトリの共有権限を設定します。

  • Windows エクスプローラーで、仮想ディレクトリに変換された物理ディレクトリに移動します。ディレクトリ名を右クリックします
  • プロパティを選択する
  • 「セキュリティ」タブで「追加」を選択します
  • IIS ユーザー名を入力します。つまり、次のようになります。IUSR_AVSJ82S 名前をクリックして確認します。
  • 「OK」をクリックします
  • 権限を読み取りと書き込みに設定します。

FYI:Server 2003(RPSに接続する必要があるアプリを開発する)では、拡張機能を追加することはできませんでした。*、ルート節を変更する代替ソリューションを使用しました。

コントローラー名の末尾に .aspx を追加してみましたか?

スタックオーバーフローの質問にはうまくいきました ASP.NET MVC ホスティングはどこで入手できますか?.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top