1

localhost/foo/barこのような拡張子のない URLが要求されたときに実行されるはずの HttpHandler を持つプロジェクトがあります。これをローカルの Visual Studio 開発サーバーで (の代わりに<httpHandlers>inを使用して) 適切に動作させましたが、この機能は IIS 7.5 に展開すると動作しません (標準 404 エラー: http://i.imgur.com/YuNjT.jpg ) 。 . この問題は拡張子のない URL に限定されるものではありません (最後に拡張子を追加しても問題は残ります) が、このシナリオでは拡張子のない URL を使用することを希望する機能です。拡張子のない URL がいくつかの問題を引き起こす可能性があるという情報を Google で検索したので、ここで言及します。AppPool は Integrated に設定されています。aspnet_regiis.exe -i を実行しました。IIS サーバーに HTTP リダイレクト機能がインストールされています。ここに私のハンドラの設定があります:<system.web><system.webServer><handlers>

<system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true" />
    <handlers>
        <add name="FileDownloadHandler" path="/Home/Files/*" verb="*" type="MvcApplication1.FileDownloadHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode" />
    </handlers>
    <directoryBrowse enabled="true" />
</system.webServer>

そして、これが私のルーティング設定です:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("home/files/{*pathInfo}");

routes.MapRoute(
    "Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

コードは問題ないと思いますが、IIS の構成に問題があります。誰かが私を正しい方向に導くことができますか? 私は何日もグーグルで検索しましたが、私を助ける解決策を見つけることができませんでした. サンプル プロジェクトは次のとおりです (ローカル VS 開発サーバーでは動作しますが、IIS では動作しません): http://mapman.pl/MvcApplication1.zip

上記のソリューションをビルド (およびローカル IIS にデプロイ) するときは、次のような URL をリクエストしてみてください。http://localhost/MvcApplication1/Home/Files/foobar

前もってありがとう、バーテック

4

1 に答える 1

1

web.config で以下を置き換えます。

path="/Home/Files/*"

と:

path="Home/Files/*"

その理由は、IIS でアプリケーションをホストする場合、仮想ディレクトリ名があり、正しいパス/MvcApplication1/Home/Files/*/Home/Files/*. この問題は、属性に相対 URL を使用することで簡単に解決できpathます。

于 2012-07-18T09:43:53.857 に答える