ユーザーが自分のサイトに情報を入力して例外を経験した場合、その例外をキャプチャする最も良い方法は何ですか?私は、例外が発生したときにフォーム上で何が記入されたのかを知りたいと思います。どのように扱ったのですか?どのツールを使っていますか?私はELMAHとlog4netを調べて、現在この情報を取得するためにlog4netを使用しようとしています。フォームフィールドをキャプチャする最良の方法は何ですか?例外時にユーザーエクスペリエンスを取得する
1
A
答えて
1
Global.asax.csのApplication_Error
では、次のものにアクセスしてログに記録することができます。これは私たちが行うことです(具体的な内容は削除されています)。
明らかに、それぞれvar whatever = ...
の代わりにLogInSomeWay(whatever)
を実行します。このコードは、現在の経験の各重要な部分を変数に割り当てることを示しています。
これが役に立ちます。我々はELMAHを使用してきたいくつかのプロジェクトで
コード
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];
}
}
}
}
1
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();
...
あなたは、あなたが合うように、この情報を保存/ログインすることができます。
1
が、私は何とかそれを好きではありません。 (私の個人的な経験だけど)ELMAHでフィルタされたエラーログを読む能力は素晴らしいですが、それはそれです。
私自身のエラーハンドラを書いた経験がありました。 1つの方法は、Application_Error
イベントを購読することです。
カスタムヘルスモニタリングプロバイダを作成することもできます。私はここでそのトピックについて書いています:http://www.tomot.de/en-us/article/6/asp.net/how-to-create-a-custom-healthmonitoring-provider-that-sends-e-mails
例外を投げたフォームへの参照を取得し、すべてのControl/TextBoxを繰り返してその値を取得することは可能でしょうか。
関連する問題
- 1. 問題、取得実行時例外
- 2. は、nullポインタ例外を取得::ラインでnullポインタ例外を取得する1.3
- 3. 例外の取得 - CordaM13に
- 4. 取得例外:org.hibernate.exception.sqlgrammarexception
- 5. 取得例外が
- 6. ArrayIndexOutOfBoundsExceptionを取得する例外
- 7. アプリケーションでランタイム例外を取得する
- 8. リセットバッファjetty例外を取得する
- 9. C++例外でスタックトレースを取得する
- 10. nullPointer例外を取得する
- 11. Python:例外のエラーメッセージを取得する
- 12. レスポンスコンポーネントでヌルポインタ例外を取得する
- 13. ソケットで例外オブジェクトを取得する
- 14. は、例外を取得する春のポートレットのためにお時間を
- 15. ReplyToが一時キューである場合の例外の取得
- 16. サードパーティのWCF - SOAP例外の根底にある例外を取得する
- 17. システム時間帯がなくなったときに例外を取得する
- 18. SpImportの実行時に "エラー:HRESULTからの例外:0x80040E2F"を取得する
- 19. Windows Workflow 3.5での例外処理時にスタックトレースを取得する方法は?
- 20. ジャスパー例外の取得
- 21. 例外の取得 'NSRangeException'
- 22. RequestEntityTooLarge例外の取得
- 23. ブースト:asio取得例外
- 24. 取得:TypeError例外:パイソン3.2.3
- 25. パーズ例外の取得
- 26. 例外ブロックの取得ScheduledExecutorService
- 27. Java.Lang.ClassNotFoundException:<例外が例外の詳細を取得する時間を超過しました>
- 28. 時間オブジェクトをsoapuiに渡して例外を取得します。
- 29. UTF-8 BOMの作成時の例外の取得
- 30. 私の例外クラスで例外の行を取得
ありがとうChris ..コンソールアプリケーションのようにasp.netアプリケーションの外でHttpContext.Requestをテストするにはどうすればいいですか?私はMoqを探していますが、それは複雑に見えます。私にお知らせください。ありがとう –
@ dotnet-practitionerは、そのメソッドを抽象化し、ラップされた['HttpContextBase'](http://www.codethinked.com/using-systemwebabstractions-in-your-webforms-apps)に渡します。次に、HttpContextの代わりに 'HttpContextBase'のインスタンスを使ってテストします。 –
@ dotnet-practitionerもし私が尋ねることができるなら、あなたはなぜもっと詳細な答えを受け入れなかったのですか? –