手前のエラーがカスタムエラーのリダイレクト?
-
13-09-2019 - |
質問
たかだと思っていするソリューションの場合はそのようなエラーメッセージをカスタムページに表示すべき事は何か?
でいます。config:
<customErrors mode="On" defaultRedirect="~/Error.aspx"></customErrors>
グローバル.asax:
<script RunAt="server">
void Application_Error(object sender, EventArgs e)
{
Exception ex = Server.GetLastError();
if (ex != null && Session != null)
{
ex.Data.Add("ErrorTime", DateTime.Now);
ex.Data.Add("ErrorSession", Session.SessionID);
HttpContext.Current.Cache["LastError"] = ex;
}
}
</script>
私のエラーになります。aspx.cs:
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack) return;
if (HttpContext.Current.Cache["LastError"] != null)
{
Exception ex = (Exception)HttpContext.Current.Cache["LastError"];
if (ex.Data["ErrorTime"] != null && ex.Data["ErrorSession"] != null)
if ((DateTime)ex.Data["ErrorTime"] > DateTime.Now.AddSeconds(-30d) && ex.Data["ErrorSession"].ToString() == Session.SessionID)
Label1.Text = ex.InnerException.Message;
}
}
:思います。からの送迎です。asaxで..わかりません。も不器用なものです。していきたいと考えてい変更customErrorsにRemoteOnly.って保存前の例外のどこかができないセッションで保存キャッシュが追加データ(時間SessionID)以降のキャッシュはグローバルという表示されていない間違ったエラーを入れてもらった。
私は、コードを幾分強含んでいる。でん:
void Application_Error(object sender, EventArgs e)
{
HttpContext.Current.Cache["LastError"] = Server.GetLastError().GetBaseException();
Server.ClearError();
}
とは---...
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack) return;
if (HttpContext.Current.Cache["LastError"] != null)
{
Exception ex = (Exception)HttpContext.Current.Cache["LastError"];
if (ex != null)
Label1.Text = ex.Message;
}
}
注SessionIDがついていない場合は匿名のユーザます。データです。キーの追加があるとエラーにな作りにしたことのなかった私にとって大切なのはコClearError
解決
私はそれを行うにはまともな方法だと思います。それは私がそれを行う方法はありませんが、私のコードは(とVB.NETで)を投稿するにはあまりにも長いです。
私は変化するであろうことの一つは、エラーページそのものです。代わりに、エラーを表示するので、ユーザーが自分のメールアドレスを入力して、あなたにエラー報告を送信する]ボタンをクリックすることができ、オプションのフィールドとしてエラーページにテキストボックスを追加することを検討してください。あなたがエラーレポートを受信したとき、あなたは問題を見て、彼らに返信することができます。それはそれを行うにはより多くのユーザーフレンドリーな方法だとそれは私がこの上を行ってきたサイトのために非常によく働いています。
これらの線に沿って、あなたはまた、フォームデータ、セッションデータ、および価値の何かを収集し、同様のエラーレポートにそれを置きたいかもしれません。これは、問題を診断する方がはるかに簡単にすることができます。
他のヒント
私たちは、またはあなたのために動作しない場合があります何かをします。私たちは、DBに大規模な伐採を行います。我々はエラーを取得する場合、我々はそれを記録し、それがエラーIDを生成します。私たちは、エラーIDを持つ一般的なページにリダイレクトし、そこに詳細を取得します。
もちろん、このエラーは「DBに接続できません」しかし、それはあまりにも頻繁に起きていないときにその顔に平らに落ちる;)
これは、賢明ではないでしょう。私もあなたがいないの出力を直接、エラーメッセージは、セキュリティ上の理由から、エンドユーザーにすべきであると言うべきです。
この問題を見てください。
ASP.NETカスタムエラーページサーバのGetLastErrorはnullです>
次のようなものを入れて要約します
Server.Transfer(String.Concat("~/Error.aspx?message=", HttpUtility.UrlEncode(ex.InnerException.Message)))
むしろのcustomErrorsセクションの設定を使用してリダイレクトを行うにはASP.NETに頼るよります。
私はより良いアプローチは、データベース内のエラーを記録し、ユーザーにだけエラーIDを返すようになることn8wrlとスティーブの両方に同意する必要があります。彼らは本当に技術的な詳細を確認する必要はありませんし、機密情報を公開する可能性があります。
私たちの場合は、(利用可能な場合)当社は、ユーザーのIDを渡すと、エラーが発生したページ(あなたが世界のApplication_Errorに着くときRequest.URLはまだ良いです)。このように、我々は少し簡単にエラーを追跡することができます。スクリプトタグでのGlobal.asaxを使用する必要がないことにも注意してください。あなたにApp_CodeディレクトリにGlobal.asax.csファイルを作成する場合は、あなただけ(これはしかし、プロジェクトの種類に依存してもよい)直接のC#をコーディングすることができます。
Server.ClearError();
この行は、私が思うにErrorMessageを表示した後Error.aspx.csに配置する必要があります。
を担当していたのをカスタムエラーページです。全てのインターネットはモバイル:します。設定ファイルまた:
<customErrors mode="On">
<error statusCode="404" redirect="~/error-pages/page-not-found.aspx?error=1"
</customErrors>
とです。asaxのApplication_Error方法一部のコー---
Server.Transfer("~/error-pages/error.aspx");
のカスタムエラーページ"エラーになります。aspx": Server.ClearError();
わからないなどの変更がなかったたなくなった。のコードに達し、サーバーにコピーします。Ii.移転方法、例外は常に上げた:エラーの実行を子どもの要求にオススメはできません。
ご本人の了解のもと、掲載していソフトウェア技術者、ついに見つかります。かっ自分のコードは、その仕事:
<customErrors mode="On" defaultRedirect="~/error-pages/error.aspx">
<error statusCode="404" redirect="~/error-pages/page-not-found.aspx?error=1" />
</customErrors>
のです。asax方法
Session["LastError"] = Server.GetLastError();
また、キャッシュ[""]コードが、希望のセッションに変更します。
なんの。
- 忘れずにエラーのカスタムエラーページです。ことが重要になります。また、記載しく表示されない現象を正確に全てのエラーはユーザーが行います。もしかし特定のユーザーに優しい形式です。に情報をログファイルまたは送信でメールまたは、地下鉄からも近くて便利。
ことを期待した置す.