2008-09-08 9 views
1

私はApplication_ErrorハンドラでHttpRequestValidationExceptionを実装しており、可能であればカスタムメッセージを表示したいと考えています。Response.StatusCodeとInternet Explorer - カスタムメッセージを表示しますか?

今、私はStatusCodeについて考えています。私の現在の例では、200を送信します。私はそれをしてはいけないと思います。代わりに、(IMHO)より適切な400 Bad Requestを送信したいと思います。しかし、同時に、Response.Writeを使用してカスタムメッセージを入力したいと考えています。 Firefoxは正常に表示しますが、IE7ではInternet Explorerのデフォルトのエラーページが表示されます。

一方、私はInternet Explorerがすべての "良い"コンテンツを持っていないことを単に仮定していると思います。ここにはRFC is not really clearがあります。

私は、HttpRequestValidationExceptionの良い習慣によって引き起こされるエラーページのHTTP 200を送信しているのでしょうか?良い選択肢はありますか?

+0

ありがとうございました!私の解決策:> 512 Byte Error.aspxを作成しましたが、Global.asaxによってStatusCodeが400に設定され、Response.Redirectの代わりにServer.Transferが実行されます。 AJAXとInternet Explorerでうまく動作します。 –

+0

追加するだけです:通常、Response.Redirectも実行可能な解決策になります。ただし、ASP.net AJAXを使用すると、リダイレクトされます。 Server.Transferを使用すると、AJAX-Requestsの現在のページにとどまり、JavaScriptでエラーを処理できます。私のHttpRequestValidationException質問を参照してください。 –

答えて

4

HTTP 200応答コードはエラーを示していません。それはすべてがOKだったことを示します。エラーに対して200応答コードを使用しないでください。

レスポンスが512バイト未満の場合、Internet Explorerは「Friendly Errors」ページを表示します。この問題の詳細は次のとおりです。http://weblogs.asp.net/scottgu/archive/2006/04/09/442332.aspx

+0

よく知っておいてください。そうすれば、少なくとも513バイトのレスポンスが爆発する可能性があります。 –

1

いいえ、それは確かに良い習慣ではありません。 2XXステータスコードは、が有効であることを(特に)が意味します。これは、HttpRequestValidationExceptionを発生させることとは正反対です。

IEを正しく動作させる方法がわかりません。 200を送信するよりも若干優れた方法は、エラーページにリダイレクトすることですが、完璧からはまだ遠いです。

1

Internet Explorerは、レスポンスが4xxまたは5xxの場合、「フレンドリーなHTTPエラーメッセージ」と呼ばれるものを表示します。このオプションは、IEのTools.Options.Advanced [Browsing]ダイアログでユーザーがオフにすることができます。

エラーページで200を送信することは、一般的には悪いことです。 1つの代替方法は、という有効な「エラー」ページを用意し、エラーメッセージを表示するようにとすることです(200は問題ありません)。そのページに3xxリダイレクトを使用します。

+0

実際には良いアイデアのように聞こえます。私はすでに悪夢をAJAXで動作させる方法を考えていますが、私は現在のResponse.Write(ハードコーディングされたhtml)アプローチに満足していないので、これを克服します。別のerror.aspxには他の利点があります。 –

関連する問題