web-dev-qa-db-ja.com

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

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

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

159
Alan T

免責事項:これは私の経験によるものであり、証明された事実ではありません。

どちらもウェブサイトのエラー処理を定義するために使用されますが、異なるソフトウェアは異なる構成要素を参照します。

customErrorsは、Visual Studio開発サーバー(別名:VSDSまたはCassini)で使用されるレガシー(下位互換)要素です。

httpErrorsは、IIS7でのみ使用される新しい要素です。

これは、ローカルIISの代わりにVSDSを使用しながらASP.NET Webサイトを開発する際のpossible問題を強調しています。

また、エラー出力を完全に制御したい場合は、 この投稿を自分で参照してください IIS7でエラーメッセージを処理する方法について。

概要:

  • VSDSで開発-customErrorsを使用
  • サイトをIIS6に公開-customErrorsを使用
  • サイトをIIS7に公開します-httpErrorsを使用します。

VSDSを使用して開発し、IIS7に公開する場合、両方が必要になると思います。

81
Pure.Krome

* 2016年4月に更新

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

  • / myfakeextensionslessurl-> httpErrors 404
  • /myfakeaspsx.aspx-> customErrors 404
  • /myfakeimage.jpg-> httpErrors 404
  • /throw500.apx-> customErrors 500
  • / throw500-> customErrors 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. 正しいステータスコードが表示されます

Configのいくつかのオプションを明確にするために:

  1. <customErrors mode="RemoteOnly"。ここで指定できます:OnOffRemoteOnly

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

  3. <httpErrors errorMode="DetailedLocalOnly"。これはcustomErrorsモードと同等です。使用可能なオプション:CustomDetailedDetailedLocalOnly

私を大いに助けた良いブログ投稿は: http://benfoster.io/blog/aspnet-mvc-custom-error-pages

126
Maarten Kieft

<customErrors><httpErrors>


<customErrors>

  • iIS7 +で引き続き利用可能
  • aSP.NETによって処理されるリクエストのカスタムエラーページを指定する
  • aSP.NETアプリケーション内のリクエストのみを処理します
  • hTMLファイルやディレクトリ(「フレンドリ」)URLなどの静的ファイルは処理されません

<httpErrors>

  • iIS7で導入
  • iISによって処理されるリクエストのカスタムエラーページを指定する
  • aSP.NETアプリケーション内のリクエストを処理しますAND/OR-ASP.NETアプリケーション外のリクエストを処理します*
  • すべてのファイルとURLが処理されます*

注:customErrorsを使用する必要はなくなりました

引用元: ASP.NETのカスタム404およびエラーページ (優れた記事)


ExecuteURLは、.aspxページなどの動的コンテンツを提供します(path値はサーバー相対URLでなければなりません):

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

Fileは、.htmlページなどのカスタムエラーファイルを提供します。

<system.webServer>
  <httpErrors errorMode="Custom" existingResponse="Auto" defaultResponseMode="File" >
    <remove statusCode="404"/>
    <error statusCode="404" path="404.html" />
  </httpErrors>
</system.webServer>

参照: HTTPエラー (www.iis.net)

詳細については、上記のwww.iis.netリンクをお読みください

33
JohnB

Web構成のエラーセクションは、カスタムHTTPエラー処理アプローチを提供するためのものです。2つのセクションがあります。1つはセクションsystem.web内のcustomErrors、もう1つはセクションsystem.webServer内のhttpErrorsです(以下を参照)。

customErrors:このセクションは、IIS 7が導入される前、IIS 6 5およびこれを完全に使用する前に使用されていました。 HTTPステータスコードに従ってカスタムHTTPエラーを処理するセクション。

httpErrors:IIS 7以降では、このセクションとcustomErrorsindex.aspxのようなISAPI dll(.aspx、ashx、.asmx、.svcなど)を使用してページ拡張レジスタを要求した場合、ファイル拡張子に基づいてカスタムhttpエラーを処理するセクションIIS pick customeErrorsセクションから設定をアップするか、httpErrors(IIS 7ホストモードは、クラシックではなく統合ムードとして設定する必要があります)

以下は、404エラー処理チェックリンクの例です。

webconfig、iis、asp.netのhttperrors vs customerrors

4
Rohit