का उपयोग कर एक MVC3 वेब अनुप्रयोग में मैंMVC [HandleError] जब वैश्विक लॉगिंग
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
उपयोग कर रहा था वैश्विक त्रुटि हैंडलिंग जहां उपयोगकर्ता 'त्रुटि' दृश्य दिखाया गया था, तो एक बिना क्रिया का अपवाद हुई लागू करने के लिए दो बार बुलाया HandleErrorAttribute।
एक विशेष दृश्य के लिए, यदि [HandleError(View = "SpecialError")]
के साथ विधि को सजाने के द्वारा एक अनचाहे अपवाद हुआ तो भी मैं एक अलग त्रुटि दृश्य प्रदर्शित करना चाहता था। यह ठीक काम किया।
मैं फिर वैश्विक लॉग इन अनचाहे अपवादों को जोड़ना चाहता था। बजाय इस विशेषता नाम का उपयोग करने के
public class MyHandleErrorAttribute : HandleErrorAttribute
{
public override void OnException(ExceptionContext context)
{
// Write to log code
base.OnException(context);
}
}
और अद्यतन RegisterGlobalFilters और विधि सजावट: मैं प्रवेश कोड के साथ एक कस्टम HandleError विशेषता बना। यह आम तौर पर काम करता है लेकिन विधि है कि MyHandleError(View = "SpecialError")]
OnException विधि के साथ सजाया गया है भीतर एक अपवाद तब होता है जब दो बार कहा जाता है। मैं मूल रूप से माना जाता है कि सजा इस विशेषता के साथ विधि वैश्विक हैंडलर अधिक्रमण, लेकिन ऐसा लगता है कि यह बस में जोड़ा जाता है (जो और अधिक समझ में आता है, लेकिन यह मैं क्या चाहते हैं नहीं है)। ऑनएक्सप्शन को दो बार कॉल करके, एक ही अपवाद दो बार लॉग होता है जो नहीं होना चाहिए। मुझे नहीं लगता कि OnException बुलाया जा रहा है दो बार क्योंकि यह एक कस्टम विशेषता है - मेरा मानना है कि यह भी मानक HandleError विशेषता के साथ होता है, यह बस अब दिख रहा है के रूप में मैं इसके बारे में एक रिकॉर्ड बनाया है।
अंत में, मैं, सभी बिना क्रिया अपवाद (एक बार) लॉग इन करने की है, जबकि [HandleError] द्वारा की पेशकश की सुविधाओं को बनाए रखना विशेष रूप से विशेष विधि अपवाद के लिए अलग-अलग दृश्यों की स्थापना करना चाहते हैं। क्या ऐसा करने का कोई साफ तरीका है?
धन्यवाद! यह मेरे लिए भी काम किया। – abjbhat
हाय, अच्छा समाधान, लेकिन आप कक्षा/विधि नाम जैसे अपवाद के स्रोत से अधिक जानकारी कैसे प्राप्त कर सकते हैं? – Patrick