カスタム404エラーが適切にリダイレクトされません
-
25-09-2019 - |
質問
Web.configファイルにこのカスタムエラーリダイレクトがありますが、追加してから動作していないようです。 redirectMode="ResponseRewrite"
500エラーでは正常に動作しますが、404では正常に動作しません(404があるときにリダイレクトしません)
これがからのコードです web.config
<customErrors mode="On" redirectMode="ResponseRewrite">
<error statusCode="404" redirect="/servererror/default.aspx" />
<error statusCode="500" redirect="/servererror/default.aspx" />
</customErrors>
そして、これが私です servererror/default.aspx
コード
Dim err As System.Exception = Server.GetLastError()
Dim Errormail = New MailMessage
'Send email to Bondholder using email address from form
Errormail.To = "email@email.co.uk"
Errormail.From = "servererror@email.co.uk"
Errormail.Subject = "Server Error Alert"
Errormail.BodyFormat = MailFormat.Text
Errormail.Priority = MailPriority.Normal
Errormail.Body = ("Error on page - " & err.InnerException.Message & vbcrlf & vbcrlf & "URL of the page - " & Request.Url.ToString())
SmtpMail.SmtpServer = "localhost"
SmtpMail.Send(Errormail)
私は維持する必要があります redirectMode="ResponseRewrite"
そのため servererror/default.aspx
エラーが発生したときに電子メールを送信します
どんな助けも大歓迎です
ありがとう
ジェイミー
アップデート
私はウェブの周りを見てきましたが、同じ問題を抱えている他の人がかなり多くいることがわかりましたが、決定的な答えは見つかりません。
何か案は
ありがとう
ジェイミー
解決
ページが見つからないときに汎用.NETを見ていると思いますか?
ソリューションは以下のとおりです。パスの〜の追加に注意してください。
<customErrors mode="On" redirectMode="ResponseRewrite">
<error statusCode="404" redirect="~/servererror/default.aspx"/>
<error statusCode="500" redirect="~/servererror/default.aspx"/>
</customErrors>
アップデート:
ソリューションは機能しますが、それは少しハッキーです - 特に、あなたがセッション状態を利用した方法は、大規模なアプリケーションまたは他のよりベテランの開発者の中で眉をひそめます。 500と404のエラーを異なるページに分割することをお勧めします。
ウェブサイトがWebを介して利用可能な場合、さまざまなエラーメッセージを実際のユーザーに表示すると便利です。後で戻る。各ページのエラー上のテキストは、それに応じてこれを反映する必要があります。また、検索エンジンに適切なステータスコードを報告して、ページが利用できなくなったかどうかを示すことも重要です。つまり、プロジェクトから削除され、検索エンジンインデックスから削除する必要があります。後でページをクロールするために戻り、インデックスからドロップしません。これらのステータスコードを正しく報告しないと、検索エンジンを介してWebアプリのパフォーマンスが損なわれる可能性があります。通常、私のweb.configは以下のように読み取ります:
<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/GenericError.aspx">
<error statusCode="404" redirect="~/NotFound.aspx"/>
</customErrors>
注:.NETフレームワーク内で最近発見されたセキュリティホールのために、「defaultredirect」属性を設定することが重要です(Google Ask)。これを設定することは、穴を差し込むための回避策です。
適切なHTTPステータスコードをクライアント(および検索エンジンボット)に報告するには、以下のコードを使用できます。関連ページのページロードイベントにそれらを配置するだけです。
500エラーの場合:
Response.Status = "500 Internal Server Error"
404エラーの場合:
Response.Status = "404 Not Found"
これで、Global.asaxからコードを削除し、各ページから呼び出すことができるエラー電子メールロジックの共有関数を作成できます。上記のコードを既存のエラーページにマージできる場合は、既存のエラーページにマージできますが、私はそれがよりきれいだと思うので、常にそれらを分割することを好みます。
ページのHTTPステータスコードをテストする場合は、無料アプリケーションをご覧ください。 フィドラー