13

以下のweb.configコードを使用して、欠落しているページへのリクエストを404エラー処理ページにリダイレクトしています。

<customErrors mode="On" defaultRedirect="404.aspx" redirectMode="ResponseRewrite">
  <error statusCode="404" redirect="404.aspx"/>
</customErrors>

「missing.aspx」などのページを検索すると正常に機能しますが、「missing.asp」や単に「missing」などの「.aspx」拡張子のないページでは機能しません。動作しない場合は、標準のIIS7.5エラーページをロードするだけです。

私は何が間違っているのですか?.net 4を使用しています。他の人が同じ質問をしているのに気づきましたが、答えが得られませんでした。

ありがとう!

4

3 に答える 3

9

dbasemanが述べているように、これはasp.netハンドラーが非asp.netファイルに対して呼び出されないためです。asp.netハンドラーをすべての要求で動作させる簡単な方法は、web.configで次のように設定することです。

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
</system.webServer>

これにより、IISは、.html、.jpg、.css、.jsなどのすべての要求に対してすべての管理対象モジュールを実行するように指示されます。これは、余分な処理と遅延をもたらすだけなので、通常は眉をひそめます。

http://www.hanselman.com/blog/BackToBasicsDynamicImageGenerationASPNETControllersRoutingIHttpHandlersAndRunAllManagedModulesForAllRequests.aspx

試す別のオプション(上記よりもクリーン)が回答としてここに投稿されました:https ://stackoverflow.com/a/6661699/701062

于 2012-06-15T07:10:49.723 に答える
4

その理由は、ASPX以外の拡張機能がASP.NETハンドラーに到達することは決してないためです。表示されるエラーはIISからのものです。web.configのsystem.webServerの下に、これらのエラーを処理するために構成する必要がある別のセクションhttpErrorsがあります。詳細については、こちらをご覧ください。

リンクからの例:

<configuration>
   <system.webServer>
      <httpErrors errorMode="DetailedLocalOnly" defaultResponseMode="File" >
         <remove statusCode="500" />
         <error statusCode="500"
            prefixLanguageFilePath="C:\Contoso\Content\errors"
            path="500.htm" />
       </httpErrors>
   </system.webServer>
</configuration>
于 2012-06-15T06:39:42.573 に答える
1

以下をWeb.configに追加します。

<system.webServer>    
    <httpErrors errorMode="Custom" defaultResponseMode="ExecuteURL" >
      <remove statusCode="404" />
      <error statusCode="404" path="/Default.aspx" responseMode="Redirect" />
    </httpErrors>
  </system.webServer>

Ospreyのコードを取得し、responseMode = "Redirect"を追加して、ページのソースコードを表示するだけの問題を修正しました。

于 2021-03-15T15:03:10.533 に答える