1. ホーム
  2. asp.net-mvc

[解決済み】ASP.NET mvcとIISでURLのドットが原因で404になる

2022-03-27 02:36:09

質問

あるプロジェクトで、URLのパスにドットを使用する必要があります。例えば、www.example.com/people/michael.phelps のようなURLがあるとします。

ドット付きのURLは404を生成します。私のルーティングは問題ありません。ドットなしでmichaelphelpsを渡すと、すべてがうまくいきます。ドットを付けると、404エラーが発生します。サンプルサイトは、Windows 7、IIS8 Expressで動作しています。URLScanは起動していません。

web.configに以下を追加してみました。

<security>
  <requestFiltering allowDoubleEscaping="true"/>
</security>

残念ながら、それは違いを生じなかった。404.0 Not Foundのエラーが表示されるだけです。

これはMVC4のプロジェクトですが、それは関係ないと思います。ルーティングは問題なく動作し、期待するパラメータはドットを含むまで存在します。

URLにドットを使用できるようにするには、何を設定する必要がありますか?

どのように解決するのですか?

私は、自分のサイトのHTTPハンドラを編集することで、これを動作させました。私のニーズでは、これはうまく機能し、私の問題を解決しています。

特定のパス条件を検索する新しいHTTPハンドラを追加しただけです。リクエストが一致した場合、.NETに正しく送信され、処理されます。私は、URLRewriteハックやRAMMFARを有効にするよりも、この解決策に満足しています。

たとえば、.NETにURLを処理させるには、次のようにします。 www.example.com/people/michael.phelps の中のweb.configに以下の行を追加してください。 system.webServer / handlers 要素を使用します。

<add name="ApiURIs-ISAPI-Integrated-4.0"
     path="/people/*"
     verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS"
     type="System.Web.Handlers.TransferRequestHandler"
     preCondition="integratedMode,runtimeVersionv4.0" />

編集

この問題の解決策を示唆する他の投稿があります。 RAMMFAR または RunAllManagedModulesForAllRequests . このオプションを有効にすると、すべてのリクエストに対してすべてのマネージドモジュールが有効になります。つまり、画像、PDF、その他すべてのような静的ファイルは、必要でないときに.NETによって処理されます。このオプションは、特定のケースがない限り、オフにしておくのが最善です。