customErrorsとhttpErrorsの違いは何ですか? 質問する

customErrorsとhttpErrorsの違いは何ですか? 質問する

ASP.NET MVC アプリケーションの web.config ファイルの セクションcustomErrorsとセクションの違いは何ですか?httpErrors

各セクションの使用に関するガイドラインは何ですか?

ベストアンサー1

*2016年4月更新

customErrors 属性は、.net コードが例外 (404、403、500 など) をスローしているときに使用され、httpErrors 属性は IIS 自体が例外をスローしているときに使用されます。

  • /myfakeextensionslessurl --> httpErrors 404
  • /myfakeaspsx.aspx --> カスタムエラー 404
  • /myfakeimage.jpg --> httpエラー 404
  • /throw500.apx --> カスタムエラー 500
  • /throw500 --> カスタムエラー 500

これを正しく設定しようとすると、多くの落とし穴があります。簡単な例を探している場合、最適な 2 つのオプションは次のとおりです。

例1: HTMLページの使用

<system.web>
  <customErrors mode="RemoteOnly" defaultRedirect="/Error500.html" redirectMode="ResponseRewrite">
    <error statusCode="403" redirect="/Error403.html" />
    <error statusCode="404" redirect="/Error404.html" />
    <error statusCode="500" redirect="/Error500.html" />
  </customErrors>
</system.web>
<system.webServer>
  <httpErrors errorMode="DetailedLocalOnly" existingResponse="Auto">
    <remove statusCode="403" />
    <remove statusCode="404" />
    <remove statusCode="500" />
    <error statusCode="403" responseMode="File" path="Error403.html" />
    <error statusCode="404" responseMode="File" path="Error404.html" />
    <error statusCode="500" responseMode="File" path="Error500.html" />
  </httpErrors>
</system.webServer>

例 2: aspx ページの使用

<system.web>
  <customErrors mode="RemoteOnly" defaultRedirect="/Error500.html" redirectMode="ResponseRewrite">
    <error statusCode="403" redirect="/Error403.aspx" />
    <error statusCode="404" redirect="/Error404.aspx" />
    <error statusCode="500" redirect="/Error500.aspx" />
  </customErrors>
</system.web>
<system.webServer>
  <httpErrors errorMode="DetailedLocalOnly" existingResponse="Auto">
    <remove statusCode="403" />
    <remove statusCode="404" />
    <remove statusCode="500" />
    <error statusCode="403" responseMode="ExecuteURL" path="Error403.aspx" />
    <error statusCode="404" responseMode="ExecuteURL" path="Error404.aspx" />
    <error statusCode="500" responseMode="ExecuteURL" path="Error500.aspx" />
  </httpErrors>
</system.webServer>

aspx エラー ページでは、次のような操作を行う必要があります (例: 404 ページ)。

<% 
    Response.StatusCode = 404;
    Response.TrySkipIisCustomErrors = true;
 %>

注: customErrorsセクションで拡張子のないURLを使用すると、ありえない!(ハッキングなし)

回避策の 1 つは、カスタム エラーを無効にして、http エラーでカスタム ページを処理できるようにすることです。友人がそのような設定を作成しました。時間ができたら、コードを共有します。

背景

優れたカスタム エラー ページは次のようになります。

  1. 問題のあるページをローカルでアクセスしたときに実際の例外を表示する
  2. 問題のあるページにリモートでアクセスしたときにカスタムページを表示する
  3. リダイレクトは行わず、エラー ページのコンテンツのみを表示します (SEO 上の理由により)
  4. 正しいステータスコードが表示されます

したがって、設定内のいくつかのオプションを明確にします。

  1. <customErrors mode="RemoteOnly". ここで指定できるのはOn、、、OffですRemoteOnly

    • On= カスタムエラーページを常に表示する
    • Off= 常に実際のエラーを表示する
    • RemoteOnly= エラーをローカルに表示しますが、カスタムエラーページをリモートで表示します。したがって、RemoteOnlyステートメント1では
  2. <customErrors redirectMode="ResponseRewrite"ResponseRedirect。ここでは、または を指定できますResponseRewrite。このResponseRedirectモードでは、エラー ページがカスタム エラー ページにリダイレクトされます。リンク クローラー (SEO) の場合、この結果が 302 -> 500 になりますが、リンク クローラーには 500 エラーを取得させたいのです。

  3. <httpErrors errorMode="DetailedLocalOnly". これはモードに相当しますcustomErrors。使用可能なオプション: Custom、、。DetailedDetailedLocalOnly

私にとって非常に役立った良いブログ投稿は次のとおりです:http://benfoster.io/blog/aspnet-mvc-カスタムエラーページ

おすすめ記事