質問

ASP.NETでElmahを使用しており、セッション変数などのカスタムデータを未処理の例外電子メールに追加する方法を疑問に思っています。

Global.Asaxファイルでいくつかのハンドラーを試しましたが、適切なファイルを見つけることができないようです。

役に立ちましたか?

解決

このために、私はあなたがエルマを変更する必要があると思います ソース そして再コンパイル。達成するのがそれほど難しくないはずです。あなたがのコンストラクターを見ている場合 Elmah.Error クラス、 HttpContext 渡されて、必要な情報を取得できるはずです。たとえば、セッション、フォーム変数など。 Elmah.Error このデータのクラス

私は思います Elmah.ErrorMailHtmlFormatter クラスは、電子メールがaを使用して構築される場所です HtmlTextWriter, 、ここでコードを挿入できます RenderSummary() 追加したカスタムフィールドを含める方法 Elmah.Error.

ソースを使用し始めるのは苦痛かもしれませんが、個人的にはレポート/電子メールテンプレートの施設がないため、最もクリーンな方法だと思います。また、生成された後に出力を変更するために何かをボルトで締める方が良いと思います。

他のヒント

アンドリューの答えは大いに役立ちました、ありがとう。私は次のことをすることになりました:

  1. ErrorMail HTTPモジュールにBuildingイベントを追加しました。このイベントの主張には、namevalueCollectionプロパティがあります。
  2. Global.Asaxでビルディングイベントを処理しました。
  3. httpmodulesは常にSessionStateにアクセスできるとは限らないため、特に。セッションがロードされる前に例外が発生した場合、報告したいデータをHTTPApplicationキャッシュ(SessionIDでインデックス化)にコピーしました。
  4. 例外が発生した場合、リクエストに保存されているsessionID(具体的には、Cookie)を介してアプリケーションキャッシュから必要なデータを取得します。このデータからnamevalueCollectionを生成し、Building argsを介してHTTPMODULEに送信します。
  5. データは、サーバー変数セクションのレンダリング方法と同様に電子メールを送信します。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top