25

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 で [ホーム ディレクトリ] タブに移動します。残りは同じです。

ASP.NET を介してすべてをルーティングするのは少しハッキーに思えます。

ソリューション 2

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

代替テキスト

4

5 に答える 5

13

答えはこちら

*.mvc 拡張子がホスティングに登録されていない場合、404 例外が発生します。その場合に MVC アプリをホストする作業方法は、global.asax ルーティング カルセを次のように変更することです。

routes.Add(new Route("{controller}.mvc.aspx/{action}", new MvcRouteHandler()) { Defaults = new RouteValueDictionary (new{ controller = "YourController"} ) });

このようにして、すべてのコントローラー リクエストは、ホスティングによって認識される *.mvc.aspx で終了します。また、MVC dll はローカルの bin にコピーされるため、特別な設定は必要ありません。

于 2008-09-11T21:45:41.470 に答える
8

どちらの方法でも、 Solution 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 などのメディアを提供する必要がある HttpHandlers に対しても行われます。.jpg は "通常の" ASP.NET ファイル拡張子ではありませんが、ハンドラーがヒットするには、コードにマップされる必要があります。

HTH、
タイラー

于 2008-09-11T21:46:00.813 に答える
3

実行: 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

延長インサートの場合: .*

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

  • Documents の下にエントリ ポイント ファイルを追加します。つまり、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] をクリックします
  • アクセス許可を読み取りと書き込みに設定します。
于 2012-11-08T01:56:26.513 に答える
1

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

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

于 2008-09-11T21:35:32.197 に答える
1

参考までに: サーバー 2003 (RPS に接続する必要があるアプリを開発中) では、拡張子 .* を追加できませんでした。ルート句を変更する代替ソリューションを使用したところ、うまくいきました。

于 2009-05-15T17:57:03.873 に答える