2012-09-11 5 views
36

मैं निम्नलिखित वेब एपीआई (जीईटी) है:एक जटिल वस्तु को पैरामीटर के रूप में स्वीकार करने के लिए एएसपी.NET वेब एपीआई कैसे विकसित करें?

public class UsersController : ApiController 
{ 
    public IEnumerable<Users> Get(string firstName, string LastName, DateTime birthDate) 
    { 
     // Code 
    } 
} 

यह एक प्राप्त है, तो मैं इसे इस तरह कॉल कर सकते हैं:

http://localhost/api/users?firstName=john&LastName=smith&birthDate=1979/01/01 

और उपयोगकर्ता (ओं) के एक xml परिणाम प्राप्त करते हैं।

यह संभव इस तरह एक वर्ग के लिए मानकों को संपुटित करने के लिए है:

public class MyApiParameters 
{ 
    public string FirstName {get; set;} 
    public string LastName {get; set;} 
    public DateTime BirthDate {get; set;} 
} 

और फिर है:

public IEnumerable<Users> Get(MyApiParameters parameters) 

मैं इसे करने की कोशिश की और किसी भी समय किया है मैं http://localhost/api/users?firstName=john&LastName=smith&birthDate=1979/01/01 से परिणाम प्राप्त करने की कोशिश , parameter शून्य है।

उत्तर

62

डिफ़ॉल्ट जटिल प्रकार से शरीर से पढ़ा जाता है, यही कारण है कि आप शून्य हो रहे हैं।

अगर आप मॉडल बांधने की मशीन क्वेरी स्ट्रिंग से मॉडल को खींचने के लिए चाहते हैं

public IEnumerable<Users> Get([FromUri]MyApiParameters parameters) 

को अपनी कार्रवाई हस्ताक्षर बदलें। http://blogs.msdn.com/b/jmstall/archive/2012/04/16/how-webapi-does-parameter-binding.aspx

+0

अच्छा पकड़ -

आप कैसे वेब API पैरामीटर MSFT से माइक स्टाल द्वारा उत्कृष्ट लेख में बाध्यकारी करता है के बारे में अधिक पढ़ सकते हैं। मुझे पता है कि मैं कुछ याद कर रहा था! :) – Tohid

+0

ऐसा लगता है कि हर बार मुझे वेब एपीआई विकास पर वापस आना पड़ता है। मेरी इच्छा है कि स्वाशबकल कुछ सुनिश्चित करने के लिए कुछ करेगी और वेब एपीआई उनकी धारणाओं के साथ समन्वयित हो जाएगा कि यह डेटा क्वेरीस्ट्रिंग डेटा या बॉडी डेटा के रूप में आता है या नहीं। और मेरी इच्छा है कि वेब एपीआई यह नहीं मान पाएगा कि जीईटी कॉल पर बॉडी से जटिल प्रकार पढ़े गए थे - जो कि कभी भी समझ में नहीं आता है और विशेष रूप से डिफ़ॉल्ट के रूप में नहीं। धन्यवाद Tohid और @Filip - इस सवाल ने मुझे कई बार बचा लिया है! – Jaxidian