Question

CharAzurable on Fri, 20 May 2016 15:52:45


こんにちは。

ASP.NET  4  , MVC 5.2.3 のアプリケーション を IIS10 (Windows10) で開発中です。


一般的なRouteConfig設定をすると、

Home コントローラーのIndexアクションで表示されるViewが

デフォルトのホームページ (例: http://localhost/ ) として表示されます。

そのアプリのルートディレクトリに index.html ファイルを置いたのちに

デフォルトのホームページにアクセスしても、HomeコントローラーがViewを表示します。

ここで、HomeコントローラーへのRouteConfigの設定を削除してみます。

IIS Express では 

http://localhost:12345/

http://localhost:12345/index.html

のどちらにアクセスしても、index.html の内容が表示されます。

(web.config のsystem.webServer - defaultDocument の設定どおりに動作している)

ところが、IISでは

http://localhost/index.html ではindex.html が表示されますが

http://localhost/ にアクセスすると、「アクセスが拒否されました。」と表示されます。

どのようにすれば、IIS Expressと同じように、デフォルトページhttp://localhost/ にて index.html を表示させることが出来るのでしょうか?

・ routes.IgnoreRoute(""); を追加すれば良いという記事を見つけましたが解決しませんでした。

・ index.html はあくまで静的コンテンツとして扱いたいので、 controllerやviewは経由させたくありません。

よろしくお願いします。

Replies

Tak1wa on Fri, 20 May 2016 18:06:10


こんにちは。

試してみましたが、http://localhostで表示されました。
IIS対象サイトの既定のドキュメント設定は有効になっていますか。

・ routes.IgnoreRoute(""); を追加すれば良いという記事を見つけましたが解決しませんでした。

・ index.html はあくまで静的コンテンツとして扱いたいので、 controllerやviewは経由させたくありません。

「HomeコントローラーへのRouteConfigの設定を削除してみます。」とされてますが、
上記はRouteConfigの設定を削除せずに、localhostアクセス時にルーティングを無視する設定だと思います。(記事が見当たらなかったですが)
対象の静的コンテンツが存在する場合は、そもそも処理されないようですね。

RouteExistingFiles プロパティを指定すれば静的コンテンツでも処理されるようです。

CharAzurable on Sat, 21 May 2016 03:36:32


ご回答下さりありがとうございました。

RouteExistingFiles プロパティを True False 両方で試してみましたが解決しませんでした。

他の要素が関連しているかもしれませんので、環境を追記させていただきます。

・IIS対象サイトの既定のドキュメント設定は有効になっていて、index.htmlは含まれています。

 (web.config のsystem.webServer - defaultDocument は適切に設定されていて、IIS Expressでは動作しています)

・ASP.NET 4.6.1 テンプレートから、 MVC・WebAPIコアを追加してASP.NETプロジェクトを作成しました。

・SignalR が追加されています。(OWIN  Startup.cs


CharAzurable on Sat, 21 May 2016 04:07:39


ご回答下さりありがとうございました。

自己解決できましたので報告させていただきます。

プロジェクトディレクトリの全ファイルに対し、NTFSアクセス権を追加すれば表示できました。

・IIS 詳細設定の 物理パス資格情報 のアカウント (これは追加されていた)

・IIS_IUSRS (これがなかった)

ありがとうございました。大変参考になりました。