ユーザーが私のサイトに情報を入力していて例外が発生した場合、その例外をキャプチャするための最良の方法は何ですか。例外が発生したときに、フォームに何を記入していたのか知りたいのですが。どのように処理しましたか?どのツールを使用しましたか?ELMAHとlog4netを調べましたが、現在log4netを使用してこの情報を取得しようとしています。フォームフィールドをキャプチャするための最良の方法について何か提案はありますか?
3 に答える
Application_Error
Global.asax.csで、以下にアクセスしてログに記録できます。これが私たちが行うことです(詳細は削除されています)。
明らかに、それぞれの代わりにvar whatever = ...
、あなたはそうするでしょうLogInSomeWay(whatever)
。このコードは、現在のエクスペリエンスの重要な各部分を変数に割り当てることを示しています。
お役に立てれば。
コード
void Application_Error(object sender, EventArgs e)
{
Exception ex = Server.GetLastError();
HttpContext context = HttpContext.Current;
bool requestAvailable = false;
try
{
if (context.Request != null)
{
requestAvailable = true;
}
}
catch{}
if (context != null) var serverName = context.Server.MachineName;
if (context != null && requestAvailable)
{
var referrer = context.Request.UrlReferrer != null ? context.Request.UrlReferrer.ToString() : "";
// If you use forms authentication and define your own principal, do some logging with it here
OurPrincipal user = OurContext.Current.LoggedOnPrincipal;
if (user != null && user.Identity != null && user.Identity.IsAuthenticated && user.Person != null)
{
var logonName = user.Person.LogonName;
var loginPersonName = user.Person.FirstName + " " + user.Person.LastName;
}
var userIP = context.Request.UserHostAddress;
var userDns = context.Request.UserHostName;
var userAgent = context.Request.UserAgent;
var exceptionText = ex.ToString();
foreach (string key in context.Request.ServerVariables.AllKeys)
{
var currentServerVarKey = key;
var currentServerVarValue = context.Request.ServerVariables[key];
}
if (context.Request.ServerVariables["REQUEST_METHOD"] == "POST"
&& context.Request.Form != null && context.Request.Form.AllKeys != null)
{
foreach (string key in context.Request.Form.AllKeys)
{
var currentFormKey = key;
var currentFormValue = context.Request.Form[key];
}
}
}
}
にアプリケーションエラーハンドラを登録してからGlobal.Asax
、にアクセスしHttpContext.Current
てリクエストとフォームの値を取得できます。
protected void Application_Error(Object sender, EventArgs e)
{
HttpContext currentContext= HttpContext.Current;
// set the exception to the Context
Exception exception = currentContext.Server.GetLastError();
..。
その後、必要に応じてこの情報をログに記録/保存できます。
一部のプロジェクトではELMAHを使用していますが、どういうわけか私はそれが好きではありません。(私の個人的な経験ですが)ELMAHでフィルタリングされたエラーログを読み取る能力は素晴らしいですが、それだけです。
私は自分のエラーハンドラーを書くのに最高の経験をしました。行く方法の1つは、Application_Error
イベントに登録することです。
もう1つは、カスタムHealthMonitoringプロバイダーを作成することです。私はここにそのトピックについて書きました:http://www.tomot.de/en-us/article/6/asp.net/how-to-create-a-custom-healthmonitoring-provider-that-sends-e -mails
たぶん、例外をスローしたフォームへの参照を取得し、すべてのControl/TextBoxを反復処理してそれらの値を取得することが可能です。