सभी,अपवाद ASP.NET MVC और Ajax में हैंडलिंग - [HandleException]
मैं MVC सीख रहा हूँ और एक व्यापार एप्लिकेशन (MVC 1.0) के लिए उपयोग करने से फिल्टर।
मैं वास्तव में अपवाद हैंडलिंग के आसपास अपने सिर को पाने के लिए संघर्ष कर रहा हूं। मैंने वेब पर बहुत समय बिताया है लेकिन मेरे बाद की चीज़ों के साथ कुछ भी नहीं मिला है।
हम वर्तमान में एक फ़िल्टर विशेषता का उपयोग करते हैं जो IExceptionFilter लागू करता है। हम इसके साथ एक बेस कंट्रोलर क्लास को सजाने के लिए सभी सर्वर साइड अपवादों को अच्छी तरह से एक अपवाद पृष्ठ पर भेज दिया जाता है जो त्रुटि प्रदर्शित करता है और लॉगिंग करता है।
मैंने AJAX कॉल का उपयोग करना शुरू कर दिया है जो JSON डेटा लौटाता है लेकिन जब सर्वर साइड कार्यान्वयन एक त्रुटि फेंकता है, तो फ़िल्टर निकाल दिया जाता है लेकिन पृष्ठ त्रुटि पृष्ठ पर रीडायरेक्ट नहीं होता है - यह केवल उस पृष्ठ पर रहता है जिसे पृष्ठ कहा जाता है AJAX विधि।
वहाँ सर्वर पर रीडायरेक्ट मजबूर करने के लिए कोई तरीका है (उदाहरण के लिए एक ASP.NET Server.Transfer या अनुप्रेषित?)
मैं पढ़ा है कि मैं एक JSON ऑब्जेक्ट (.NET लपेटकर लौटना चाहिए अपवाद) और फिर क्लाइंट पर रीडायरेक्ट करें, लेकिन फिर मैं गारंटी नहीं दे सकता कि क्लाइंट रीडायरेक्ट करेगा ... लेकिन फिर (हालांकि मैं कुछ गलत कर रहा हूं) सर्वर रीडायरेक्ट करने का प्रयास करता है लेकिन फिर अनधिकृत अपवाद (आधार नियंत्रक) सुरक्षित है लेकिन अपवाद नियंत्रक ऐसा नहीं है क्योंकि यह इस से प्राप्त नहीं होता है)
क्या किसी को कृपया एक साधारण उदाहरण (.NET और jQuery कोड) मिला है। मैं यह काम करेगा जैसे मैं बेतरतीब ढंग से आशा में बातें कोशिश कर रहा हूँ
अपवाद फ़िल्टर अब तक ...
public class HandleExceptionAttribute : FilterAttribute, IExceptionFilter
{
#region IExceptionFilter Members
public void OnException(ExceptionContext filterContext)
{
if (filterContext.ExceptionHandled)
{
return;
}
filterContext.Controller.TempData[CommonLookup.ExceptionObject] = filterContext.Exception;
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
filterContext.Result = AjaxException(filterContext.Exception.Message, filterContext);
}
else
{
//Redirect to global handler
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = AvailableControllers.Exception, action = AvailableActions.HandleException }));
filterContext.ExceptionHandled = true;
filterContext.HttpContext.Response.Clear();
}
}
#endregion
private JsonResult AjaxException(string message, ExceptionContext filterContext)
{
if (string.IsNullOrEmpty(message))
{
message = "Server error"; //TODO: Replace with better message
}
filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
filterContext.HttpContext.Response.TrySkipIisCustomErrors = true; //Needed for IIS7.0
return new JsonResult
{
Data = new { ErrorMessage = message },
ContentEncoding = Encoding.UTF8,
};
}
}
+1 ग्राहम TrySkipIisCustomErrors को मुझे पेश करने के लिए। मुझे एक बेकार खोज के दौरान आपका प्रश्न मिला और मुझे खुशी है कि मैंने किया। –
+1 बहुत, TrySkipIisCustomErrors पर हेड-अप के लिए धन्यवाद, जिसने वास्तव में भी मेरी मदद की। – Schmuli