بيانات Elmah ysod المخصصة
سؤال
أنا أستخدم Elmah مع ASP.NET وأتساءل كيف سأضيف بيانات مخصصة ، مثل متغير الجلسة ، إلى بريد إلكتروني استثناء غير معتمد.
لقد جربت العديد من المعالجات في ملف Global.asax ، لكن لا يمكن أن تجد الملف الصحيح.
المحلول
لهذا ، أعتقد أنك ستحتاج إلى تعديل Elmah مصدر و Recompile. لا ينبغي أن يكون من الصعب للغاية تحقيقها. إذا كان لديك نظرة في مُنشئ Elmah.Error
الفصل ، و HttpContext
يتم تمرير Elmah.Error
فئة لهذه البيانات
اعتقد ان Elmah.ErrorMailHtmlFormatter
الفصل هو المكان الذي يتم فيه إنشاء البريد الإلكتروني باستخدام أ HtmlTextWriter
, ، وهنا يمكنك إدراج رمز في RenderSummary()
طريقة لتضمين الحقول المخصصة التي أضفتها إليها Elmah.Error
.
أعلم أنه قد يكون من المؤلم أن تبدأ العمل مع المصدر ، لكنني شخصياً أعتقد أنها أنظف طريقة حيث لا يوجد حاليًا مرفقًا لقوالب التقرير/البريد الإلكتروني ، ومن الأفضل أن يلتقط شيء ما لتغيير الإخراج بعد إنشاءه.
نصائح أخرى
ساعدت إجابة أندرو كثيرًا ، شكرًا. انتهى بي الأمر بما يلي:
- تمت إضافة حدث onbuilding إلى وحدة HTTP Errormail. الحدث Args لهذا الحدث لها خاصية NameValuEcollection.
- لقد تعاملت مع حدث OnBuilding في Global.asax.
- نظرًا لأن httpmodules لا يمكن دائمًا الوصول إلى SessionState ، esp. في حالة حدوث الاستثناء قبل تحميل الجلسة ، قمت بنسخ البيانات التي أردت الإبلاغ عنها في ذاكرة التخزين المؤقت HTTPAPPLICATION (مفهرسة SESSITID).
- عند حدوث استثناء ، أحصل على البيانات التي أريدها من ذاكرة التخزين المؤقت للتطبيق عبر SessionId المخزنة في الطلب (على وجه التحديد ، في ملف تعريف الارتباط). أقوم بإنشاء nameValuEcollection من هذه البيانات وأرسلتها إلى httpmodule عبر args onbuilding.
- ثم يتم تقديم البيانات إلى البريد الإلكتروني على نحو مشابه لكيفية تقديم قسم متغيرات الخادم.