2012-12-19 18 views
7

के साथ क्लाइंट साइड प्रमाणीकरण मैं वेब ऑपी के माध्यम से वापस आने वाली वस्तुओं पर क्लाइंट साइड सत्यापन करने का प्रयास कर रहा हूं। मैं अपनी इकाई संपादन स्क्रीन पर वेबपीआई के माध्यम से इकाई भेजता हूं। मैं ऑब्जेक्ट को फ़ील्ड में बांधने के लिए नॉकआउट का उपयोग करता हूं।वेबएपी

मेरे पास पहले से ही सभी सर्वर साइड सत्यापन को संभालने वाला एक एक्शन फ़िल्टर है। मैं अपने डोमेन मॉडल डेटा एनोटेशन को डुप्लिकेट किए बिना क्लाइंट साइड सत्यापन कैसे शामिल कर सकता हूं?

उत्तर

0

जब मैं अपना HTTP एपीआई बनाता हूं, तो मैंने मॉडल ऑब्जेक्ट्स (डीटीओ, अनुरोध मॉडल, आदि) को एक अलग असेंबली में रखा है जिसे मैं .NET क्लाइंट के लिए वितरित कर सकता हूं।

निम्नलिखित वर्ग पर विचार करें:

public abstract class UserUpdateRequestModel { 

    [Required] 
    [StringLength(50)] 
    public string Name { get; set; } 

    [Required] 
    [EmailAddress] 
    [StringLength(320)] 
    public string Email { get; set; } 
} 

यह वही है मैं अपने एपीआई में उपयोग करते हैं:

public UserDto PutUser(Guid key, UserUpdateRequestModel requestModel) { 

    // Do something here 
} 

आप उत्पन्न करने के लिए उदाहरण के लिए अपने ASP.NET MVC क्लाइंट अनुप्रयोग में इस एक ही मॉडल का उपयोग कर सकते सत्यापन के साथ एचटीएमएल इनपुट data- एएसपी.नेट एमवीसी के रूप में गुण डेटा एनोटेशन सत्यापन गुणों के आधार पर उत्पन्न करने का एक तरीका है।

+0

तो तुम (मेटाडाटा वस्तु किसी प्रकार का जो होते हैं जोड़ना होगा सत्यापन गुण) वेबपी प्रतिक्रिया के लिए? क्लाइंट साइड कोड बनाने के बारे में आप कैसे जाएंगे? –

+0

@kpore यदि आप एएसपी.नेट एमवीसी का उपयोग करने जा रहे हैं, तो इसका निर्माण करने का एक तरीका है। उदाहरण के लिए 'टेक्स्टबॉक्स' एचटीएमएल सहायक विधि के साथ। एक नज़र डालें: http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-validation-to-the-model – tugberk

+0

प्रतिक्रिया के लिए धन्यवाद। मैं वास्तव में एमवीसी का उपयोग नहीं कर रहा हूँ। मैं अपने सभी संचार और दृढ़ता के लिए वेबएपी का उपयोग कर रहा हूं। एचटीएमएल हेल्पर्स केवल तभी होते हैं जब आप क्लासिक एमवीसी नियंत्रकों का उपयोग कर रहे हों। –

1

वेबएपी के साथ, आपको क्लाइंट साइड सत्यापनकर्ता को मॉडल सत्यापन विफलताओं से वापस आने वाली त्रुटियों को जोड़ने के लिए थोड़ा "गोंद" कोड चाहिए।

function extractErrors(jqXhr, validator) { 
    var data = JSON.parse(jqXhr.responseText), // parse the response into a JavaScript object 
     errors = {}; 

    $.each(data.ModelState, function (key, value) { 
     var pieces = key.split('.'); 
     key = pieces[pieces.length - 1]; 
     errors[key] = value 
    }); 

    validator.showErrors(errors); // show the errors using the validator object 
} 

मॉडल पर, के रूप में हमेशा की तरह व्याख्या:

[Required] 
[Display(Name = "Group Name")] 
public string Name { get; set; } 

ध्यान में रखते हुए ValidationMessageFor टैग जोड़ने:

@Html.EditorFor(m => m.Name) 
@Html.ValidationMessageFor(m => m.Name) 
+0

प्रतिक्रिया फिलिप के लिए धन्यवाद। किसी भी सत्यापन को उपयोगकर्ता को दिखाए जाने से पहले इसे अभी भी एक सर्वर साइड राउंड ट्रिप की आवश्यकता है। [आवश्यक] विशेषता लें, आप इसे अपने त्रुटियों के चर में तब तक नहीं देख पाएंगे जब तक यह सर्वर पर विफल न हो जाए। जब तक मैंने आपके समाधान को गलत समझा नहीं है, या मेरी समस्या को समझाने में महाकाव्य विफल रहा है। –

+2

सच है, यह सर्वर को मान पोस्ट करता है, और जेसन की एक स्ट्रिंग वापस ले जाता है। मेरे मामले में, मेरे रूप बड़े नहीं थे, इसलिए मुझे क्लाइंट साइड "जैसे" प्रदर्शन मिला, और ग्राहक पक्ष "जैसे" व्यवहार, कोई स्पष्ट पोस्ट बैक नहीं मिला। 10 valdations के साथ एक छोटे से फॉर्म पर, सर्वर यात्रा लागत: स्थानीय रूप से dev सर्वर को मारने वाले एक सेकेंड का 1/100 वां। कॉरपोरेट लैन से एडब्ल्यूएस क्लाउड सर्वर पर एक सेकेंड का 1/10 वां। यह एक कॉर्पोरेट LOB प्रकार ऐप के लिए था, शायद मोबाइल/धीमी कनेक्शन के लिए उपयुक्त नहीं है। मेरे मामले में, मॉडल को एनोटेट करके सत्यापन को नियंत्रित करना यात्रा के लायक था, और विकास क्लीनर और तेज़ बना दिया। –

+0

अतिरिक्त जानकारी के लिए धन्यवाद, यह वास्तव में काफी उपयोगी है। दुर्भाग्यवश हमारे कुछ रूप काफी जटिल हो सकते हैं (उदाहरण के लिए 50-100 फॉर्म फ़ील्ड सबसे खराब केस परिदृश्य, क्योंकि हम एक लेनदेन वित्त प्रणाली विकसित कर रहे हैं), शायद सबसे अच्छा डिज़ाइन नहीं है, लेकिन हमारा व्यवसाय यह निर्देश दे रहा है। हम Azure के लिए लगभग 300-400ms राउंट यात्रा प्राप्त कर रहे हैं। –

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