2011-11-17 6 views
7

मैं एमवीसी नियंत्रकों का उपयोग कर एक आरईएसटी एपीआई विकसित कर रहा हूं। मैं सभी मॉडल बाध्यकारी त्रुटियों को संभालना चाहता हूं और उन्हें उपयोगकर्ता के अनुकूल तरीके से ग्राहक को रिपोर्ट करना चाहता हूं। मेरे कस्टम मॉडल बाइंडर्स में मैं पहले से ही एक विशेष अपवाद फेंक रहा हूं जिसे अपवाद हैंडलर द्वारा सुरक्षित माना जाता है और क्लाइंट को दिखाया जाता है।विश्वसनीय रूप से एएसपी.नेट एमवीसी मॉडल बाध्यकारी त्रुटियों को संभाल लें

हालांकि, जब डिफ़ॉल्ट मॉडल बांधने की मशीन (एक int के लिए कहते हैं, asdf) एक अमान्य मान देखता है यह या तो पूरी तरह से यह (यदि पैरामीटर आवश्यक नहीं है) की उपेक्षा या फेंक रहा है एक सादे ArgumentException (पैरामीटर आवश्यक है)। क्या दोनों मामलों को विश्वसनीय रूप से संभालना संभव है और पूरे बाइंडर को हाथ से लिखने के बिना पैरामीटर और संबंधित त्रुटि का नाम प्राप्त करना संभव है?

मैं ArgumentException जैसा दिखाना नहीं चाहता क्योंकि यह विधि और नामस्थान नामों को प्रकट करता है जिन्हें क्लाइंट को परवाह नहीं करना चाहिए। अगर यह टालने योग्य है तो मैं ArgumentException संदेश को भी पार्स नहीं करना चाहूंगा, और यह अमान्य मानों के साथ समस्या को हल नहीं करेगा क्योंकि गैर-आवश्यक पैरामीटर पूरी तरह से अनदेखा किए जा रहे हैं।

+0

क्या आपको कभी भी अच्छा समाधान मिला? मैं 'IModelBinder' को सजाने या उपclassing के बारे में सोच रहा हूं, लेकिन मैं जानना चाहता हूं कि कोई बेहतर तरीका है या नहीं। –

+0

@ फ़ैबियनस्चमीड: दुर्भाग्य से नहीं। "वेब एपीआई" मॉडल बाइंडर के पास शायद इस मामले के लिए बेहतर समर्थन है - और मुझे एएसपी.नेट कोर के बारे में पता नहीं है। –

उत्तर

3

आप अपने मॉडल पर IValidatableObject इंटरफ़ेस लागू कर सकते हैं। वहां आप अपना खुद का सत्यापन तर्क बना सकते हैं, जो आपके पास वर्तमान में Required विशेषता सत्यापन को प्रतिस्थापित कर रहा है।

public class Model : IValidatableObject { 
    public int MyIntProperty { get; set; } 

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) { 
     if (MyIntProperty == 0) { 
      yield return new ValidationResult("Please provide a valid value for MyIntProperty.", new[] { "MyIntProperty" }); 
     } 
    } 
} 

अपने नियंत्रक में आप सत्यापन त्रुटियों को देखने के लिए ModelState.Errors संग्रह का निरीक्षण कर सकते हैं। साथ ही, यह क्लाइंट पक्ष पर त्रुटि सीएसएस क्लास उत्पन्न करेगा बशर्ते आप दृढ़ता से टाइप किए गए दृश्य और HTML फॉर्म हेल्पर्स का उपयोग कर रहे हों।

संबंधित मुद्दे