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


168

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

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


1
IMHO-HttpErrorはIISレベルのエラーメッセージ処理であり、CustomErrorはWebアプリケーションのエラーのASP.Net処理です。しかし、もっと知りたい
Sunny

回答:


85

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

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

customErrors Visual Studio Development Server(別名VSDSまたはCassini)で使用されるレガシー(下位互換)要素です。

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

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

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

概要:

  • 開発中VSDS-使用中customErrors
  • サイトの公開IIS6-使用customErrors
  • サイトを公開してIIS7使用するhttpErrors

で開発しVSDS、に公開するIIS7場合は、両方が必要になると思います。


30
customErrorsはasp.net用です。httpErrorsはIIS7用であり、.netハンドラーを通過しないコンテンツ(.png、.jsなど)を処理します。.net以外のコンテンツタイプのエラーページが必要な場合は、IISエラーページ(IIS7のhttpErrors)を使用します。 、IIS6のUIです。)
zcrar70

4
デバッグのために、Visual Studioと共にIIS 7 Expressをインストールして使用することをお勧めします。Cassiniとは異なり、通常のIIS 7と同じ構成オプションを使用します。
Sean

@johnBでcustomErrorsを使用する必要がなくなりました。 そして、あまりにも必要ですか? 1.)[ ASP]セクションの[ブラウザにエラーを送信]を有効にし ますデバッグプロパティ2.) [エラーページ/機能設定の編集]で、[詳細なエラー]を選択します。 3.) を無効にIEで「HTTPエラーメッセージを簡易表示する」 stackoverflow.com/questions/2640526/...
Kiquenet

136

* 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. 正しいステータスコードが表示されます

したがって、設定のいくつかのオプションを明確にするために:

  1. <customErrors mode="RemoteOnly"。あなたがここに指定することができますOnOffRemoteOnly

    • On =常にカスタムエラーページを表示する
    • Off =常に実際のエラーを表示
    • RemoteOnly=エラーをローカルに表示しますが、カスタムエラーページをリモートに表示します。したがってRemoteOnly、ステートメント1が必要です
  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


どのような関係customErrors- ASPの「ブラウザーにエラーを送信する」のようなhttpErrorsとIIS構成-デバッグプロパティ「エラーページ/機能設定の編集」、「詳細なエラー」。stackoverflow.com/questions/2640526/…–
Kiquenet

36

<customErrors><httpErrors>


<customErrors>

  • IIS7以降でも利用可能
  • ASP.NETで処理される要求のカスタムエラーページを指定する
  • ASP.NETアプリケーション内の要求のみを処理します
  • HTMLファイルやディレクトリ(「フレンドリ」)URLなどの静的ファイルは処理されません

<httpErrors>

  • IIS7で導入
  • IISによって処理される要求のカスタムエラーページを指定する
  • ASP.NETアプリケーション内でリクエストを処理する、および/または -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リンクをお読みください


多分便利** stackoverflow.com /questions/2640526/… ** httpErrors「Send Errors to Browser」およびエラーページ
Kiquenet

3
メモit's no loger necesary to use customErrorsと引用の+1 、これは実際に私が求めていた情報です:-)
Myster

4

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

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

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

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

webconfig、iis、asp.netのhttperrorsとcustomerrors

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.