2012-08-08 13 views
13

ASP.NET वेब एपीआई मार्ग को देखते हुए:वेब एपीआई मॉडल बंधन

example/{Id} 

निम्नलिखित में से कौन ApiController कार्रवाई विधि का मानचित्रण:

public void Example(Model m) 
{ 
    ... 
} 

मॉडल वर्ग के साथ के रूप में परिभाषित:

public class Model 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

जब मैं JSON { "Name": "Testing" } को URL /example/123 पर पोस्ट करता हूं तो Id 01 की संपत्तिवस्तु बाध्य नहीं है। यह 123 के बजाय 0 के रूप में बनी हुई है।

मैं मॉडल बाध्यकारी कैसे रूट डेटा से मूल्यों को शामिल कर सकता हूं? मैं सामान्य मॉडल केस की तरह दिखने के लिए कस्टम मॉडल बाइंडर्स लिखना पसंद नहीं करूंगा। किसी भी विचार की बहुत प्रशंसा की जाएगी। धन्यवाद!

उत्तर

3

इसके लिए सुझाई गई प्रक्रिया आमतौर पर /example/{id} के बजाय /example पर पोस्ट करने के लिए है। यह पेज नीचे (हालांकि वेब एपीआई के साथ वे सामान्य रूप से उपयोग /api/{controller})

बाहर चेक तालिका आधा रास्ता: http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-api

इसके अलावा पर "ASP.NET वेब एपीआई के साथ एक रिकॉर्ड सम्मिलित करना" इस कड़ी जाँच - http://stephenwalther.com/archive/2012/03/05/introduction-to-the-asp-net-web-api.aspx

+0

यदि मैं संसाधन को पुट कर रहा हूं तो क्या होगा? उस स्थिति में मैं यूआरएल से आईडी को हटाना नहीं चाहता हूं। –

+2

उस स्थिति में आपको इसे अपने एक्शन '(इंट आईडी, मॉडल, मॉडल) पर एक अलग पैरामीटर के रूप में रखना होगा,' मुझे पता नहीं है कि सबसे अच्छा समाधान नहीं है। – dkarzon

0

मुझे नहीं लगता कि डिफ़ॉल्ट बाइंडर आपके आईडी रूट वैल्यू को आपके मॉडल आईडी प्रॉपर्टी से जोड़ सकता है, इसलिए जो भी d1k_is उत्तर उतना अच्छा है जितना मुझे लगता है कि मैं डरता हूं; या तो वह या अपने स्वयं के बाइंडर लिखना (हो सकता है कि आप शायद अधिक सामान्य बाइंडर लिख सकें? -यदि आपको एक डोमेनइन्टिटी सुपर क्लास या ऐसा कुछ पसंद है ...)

5

हमारे अंतर्निहित मॉडल बाइंडिंग इंफ्रास्ट्रक्चर नहीं है यूआरआई और शरीर दोनों से वस्तु के आंशिक बाध्यकारी का समर्थन करें। हालांकि, आप इस कार्य को पूरा करने के लिए एक कस्टम IActionValueBinder लागू कर सकते हैं। उदाहरण के लिए, कृपया ब्लॉग पोस्ट http://blogs.msdn.com/b/jmstall/archive/2012/04/18/mvc-style-parameter-binding-for-webapi.aspx देखें।

10

जो भी आप खोज रहे हैं उसे पूरा करने का सबसे आसान तरीका सिर्फ अपनी विधि में एक और पैरामीटर जोड़ना है, और निर्दिष्ट करें कि कौन सा पैरामीटर अनुरोध के भाग से आता है।

उदाहरण:

[HttpPost] 
public void Example([FromUri]int id, [FromBody]Model m) { 
    // ... 
} 

अब /examples/{id} के अपने मार्ग सफलतापूर्वक बाध्य करने में सक्षम हो जाएगा - क्योंकि Example विधि एक पैरामीटर id कहा जाता है जो यह यूआरआई में की तलाश में है है। अपने मॉडल को भरने के लिए, आप या तो आईडी वहाँ के साथ-साथ पारित कर सकते हैं, या निम्नलिखित की तरह कुछ कार्य करें:

[HttpPost] 
public void Example([FromUri]int id, [FromBody]Model m) { 
    m.Id = id; // Make sure the model gets the ID as well. 
} 

तो बस के रूप में आप ऊपर उल्लेख किया /example/123 करने के लिए { "Name": "Testing" } में पोस्ट करें।

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