मैं कस्टम हैंडलरर एट्रिब्यूट एक्शन फ़िल्टर को लागू करने का सुझाव दूंगा।
अधिक जानकारी के लिए इस लिंक देखें:
http://msdn.microsoft.com/en-us/library/dd410203%28v=vs.90%29.aspx
एक HandleErrorAttribute कार्रवाई फिल्टर सेट करने से आपको पूरा नियंत्रण है जिस पर कार्रवाई फिल्टर द्वारा नियंत्रित किया जाता है देता है, और यह नियंत्रक स्तर पर स्थापित करने के लिए आसान है, या यहाँ तक पर इसे कस्टम बेस कंट्रोलर पर सेट करके साइट स्तर, और आपके सभी नियंत्रकों को मूल नियंत्रक से प्राप्त होता है।
मैं इसके साथ कुछ और करता हूं, क्या मेरे पास एक अलग हैंडलजेसन एरर एट्रिब्यूट है जो कस्टम पेज की बजाय जेसन प्रतिक्रिया लौटकर अजाक्स कॉल का जवाब देता है।
अद्यतन:
public class HandleJsonErrorAttribute : HandleErrorAttribute
{
public override void OnException(ExceptionContext filterContext)
{
var serviceException = filterContext.Exception as ServiceException;
filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
filterContext.Result = new JsonResult { Data = new { message = serviceException == null ? "There was a problem with that request." : serviceException.Message } };
filterContext.ExceptionHandled = true;
}
}
यहाँ और jQuery है कि मैं इन unhanded अपवाद को संभालने के लिए उपयोग करते हैं::
नीचे कुछ सवाल के अनुसार, यहां एक HandleJsonErrorAttribute
है कि मैं का उपयोग का एक उदाहरण है
$(document).ajaxError(function (event, jqXHR, ajaxSettings, thrownError) {
showPopdown($.parseJSON(jqXHR.responseText).message);
});
यह मेरी अजाक्स विधियों को बहुत हल्का होने की अनुमति देता है - वे केवल सामान्य जेसन को वापस संभालते हैं, और एक अनचाहे अपवाद की स्थिति में, एक संदेश w/त्रुटि स्थिति कोड जेसन में लपेटा जाता है और लौटाया जाता है।
इसके अलावा, मेरे कार्यान्वयन में, मेरे पास कस्टम ServiceException
है जो मैं सेवाओं से फेंकता हूं, और यह एक सामान्य संदेश की बजाय सेवा परत से संदेश भेजता है।
स्रोत
2011-05-13 18:04:44
क्या आप उदाहरण दे सकते हैं कि मैं इन हैंडैक्स त्रुटि कॉल को 'हैंडलजेसन एरर एट्रिब्यूट' का उपयोग करके कैसे संभालेगा? – AdrianoRR
हाँ मुझे HandleJsonErrorAttribute में दिलचस्पी है। क्या आप मुझे और जानकारी और/या उदाहरण दे सकते हैं? –
अच्छा कोड! इससे मेरा काम बनता है। धन्यवाद! मैंने केवल स्टेटस कोड को "ठीक" में बदल दिया है और अपवाद को अपने कोड में संभाल लिया है। हर किसी के लिए जो उपयोग करना है, उसे खोजने के लिए: केवल एक्शन में विशेषता डालें (जैसे: [हैंडलजेसन एररएट्रिब्यूट] सार्वजनिक जेसन रीसेट एक्शननामैम (ऑब्जेक्ट कुछ आर्ट्स) {...} –