سؤال

أنا أستخدم Elmah مع ASP.NET وأتساءل كيف سأضيف بيانات مخصصة ، مثل متغير الجلسة ، إلى بريد إلكتروني استثناء غير معتمد.

لقد جربت العديد من المعالجات في ملف Global.asax ، لكن لا يمكن أن تجد الملف الصحيح.

هل كانت مفيدة؟

المحلول

لهذا ، أعتقد أنك ستحتاج إلى تعديل Elmah مصدر و Recompile. لا ينبغي أن يكون من الصعب للغاية تحقيقها. إذا كان لديك نظرة في مُنشئ Elmah.Error الفصل ، و HttpContext يتم تمرير Elmah.Error فئة لهذه البيانات

اعتقد ان Elmah.ErrorMailHtmlFormatter الفصل هو المكان الذي يتم فيه إنشاء البريد الإلكتروني باستخدام أ HtmlTextWriter, ، وهنا يمكنك إدراج رمز في RenderSummary() طريقة لتضمين الحقول المخصصة التي أضفتها إليها Elmah.Error.

أعلم أنه قد يكون من المؤلم أن تبدأ العمل مع المصدر ، لكنني شخصياً أعتقد أنها أنظف طريقة حيث لا يوجد حاليًا مرفقًا لقوالب التقرير/البريد الإلكتروني ، ومن الأفضل أن يلتقط شيء ما لتغيير الإخراج بعد إنشاءه.

نصائح أخرى

ساعدت إجابة أندرو كثيرًا ، شكرًا. انتهى بي الأمر بما يلي:

  1. تمت إضافة حدث onbuilding إلى وحدة HTTP Errormail. الحدث Args لهذا الحدث لها خاصية NameValuEcollection.
  2. لقد تعاملت مع حدث OnBuilding في Global.asax.
  3. نظرًا لأن httpmodules لا يمكن دائمًا الوصول إلى SessionState ، esp. في حالة حدوث الاستثناء قبل تحميل الجلسة ، قمت بنسخ البيانات التي أردت الإبلاغ عنها في ذاكرة التخزين المؤقت HTTPAPPLICATION (مفهرسة SESSITID).
  4. عند حدوث استثناء ، أحصل على البيانات التي أريدها من ذاكرة التخزين المؤقت للتطبيق عبر SessionId المخزنة في الطلب (على وجه التحديد ، في ملف تعريف الارتباط). أقوم بإنشاء nameValuEcollection من هذه البيانات وأرسلتها إلى httpmodule عبر args onbuilding.
  5. ثم يتم تقديم البيانات إلى البريد الإلكتروني على نحو مشابه لكيفية تقديم قسم متغيرات الخادم.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top