मैं समाधान पाया here
मैं MVC
यहाँ के डिफ़ॉल्ट व्यवहार को ओवरराइड करने के लिए एक कार्रवाई फिल्टर मेरी अपवाद वर्ग बनाने के लिए
class ValidationException : ApplicationException
{
public JsonResult exceptionDetails;
public ValidationException(JsonResult exceptionDetails)
{
this.exceptionDetails = exceptionDetails;
}
public ValidationException(string message) : base(message) { }
public ValidationException(string message, Exception inner) : base(message, inner) { }
protected ValidationException(
System.Runtime.Serialization.SerializationInfo info,
System.Runtime.Serialization.StreamingContext context)
: base(info, context) { }
}
ध्यान दें कि मैं निर्माता जो initializes है है था मेरा JSON यहाँ जब त्रुटि कार्रवाई फिल्टर जो लागू करता IExceptionFilter कहा जाता है और मिल फेंक दिया है कि मैं कार्रवाई फिल्टर है, मैं फिल्टर विशेषता
[HandleUIException]
public JsonResult UpdateName(string objectToUpdate)
{
var response = myClient.ValidateObject(objectToUpdate);
if (response.errors.Length > 0)
throw new ValidationException(Json(response));
}
के साथ अपने नियंत्रक को सजाने होगा अब कार्रवाई फिल्टर
public class HandleUIExceptionAttribute : FilterAttribute, IExceptionFilter
{
public virtual void OnException(ExceptionContext filterContext)
{
if (filterContext == null)
{
throw new ArgumentNullException("filterContext");
}
if (filterContext.Exception != null)
{
filterContext.ExceptionHandled = true;
filterContext.HttpContext.Response.Clear();
filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
filterContext.HttpContext.Response.StatusCode = (int)System.Net.HttpStatusCode.InternalServerError;
filterContext.Result = ((ValidationException)filterContext.Exception).myJsonError;
}
}
है मैं त्रुटि कॉलबैक पर क्लाइंट पर जेसन वापस आ गया।
यदि पाठक सोच रहा है कि "क्या यह आवश्यक है?", जवाब "नहीं" है। - मैं @ सारथ के समान स्थिति में था और त्रुटि का वर्णन करने वाले HTTP त्रुटि कोड और कुछ JSON डेटा को वापस करना चाहता था। यह पता चला कि मैं केवल उन लाइनों का उपयोग कर सकता हूं जहां प्रतिक्रिया साफ़ की गई थी, आईआईएस कस्टम त्रुटियों को छोड़ दिया गया है और स्थिति कोड बैठ गया है। मैंने उन 3 लाइनों को अपने कंट्रोलर पर अपने एक्शन में रखा, और उन 3 लाइनों के बाद, मैंने अपना JSON डेटा सामान्य के रूप में वापस कर दिया। एक जादू की तरह काम किया। –
वास्तव में यह सच है, लेकिन पुन: प्रयोज्य होने के लिए आप इसे करना चाहते हैं क्योंकि उत्तर प्रत्येक क्रिया में एक ही कोड की प्रतिलिपि/प्रतिलिपि के बजाय इंगित करता है। – Hades
यदि मैं 'StatusCode = 500' सेट करता हूं तो यह मेरे जेसन रेस्पॉन्स को अनदेखा करता है और इसके बदले" पृष्ठ प्रदर्शित नहीं किया जा सकता क्योंकि आंतरिक सर्वर त्रुटि आई है। "। सुनिश्चित नहीं है कि यह ओविन पाइपलाइन या क्या अंतर में अंतर के कारण है। – AaronLS