2009-02-13 16 views
68

क्या मैं निम्नलिखित कर सकता हूं?क्या मैं UriTemplate का उपयोग कर डब्ल्यूसीएफ रीस्टफुल सेवा में गैर-स्ट्रिंग पास कर सकता हूं?

[OperationContract] 
[WebGet(UriTemplate = "/foo/{id}")] 
string GetFoo(int id); 

मैं अपनी सेवा को रीस्टफुल सेवा और आरपीसी-शैली एसओएपी सेवा दोनों के रूप में कार्य करना चाहता हूं। यदि संभव हो तो मैं int के रूप में int को बनाए रखना चाहता हूं, और हाथ से पार्सिंग नहीं करना चाहता हूं।

उत्तर

67

यदि मुझे सही याद है, तो पथ में UriTemplate चर हमेशा वेबगेट या WebInvoke का उपयोग करते समय तारों को हल करते हैं। जब आप UriTemplate के क्वेरी भाग में होते हैं तो आप केवल int, long, आदि में UriTemplate चर को बाध्य कर सकते हैं।

+0

मैं एक जंजीर सरणी का उपयोग कर रहा हूं, और यह यह संदेश दिखा रहा है। क्या जाम वाले सरणी को पैराम में पास करने का कोई तरीका है? मैं इसे इस 'स्ट्रिंग MyMethod (स्ट्रिंग [] [] jaggedArray) की तरह कर रहा हूं; ' – CodeIt

3

दुर्भाग्य से यदि आप UriTemplate का उपयोग करना चाहते हैं तो आपको खुद को पार्सिंग करना होगा।

72

जैसा कि dthrasher का उल्लेख किया गया है, आईडी को यूआरआई के क्वेरी भाग में ले जाएं। http://en.wikipedia.org/wiki/URI_scheme

+0

धन्यवाद! यह एक विशिष्ट क्रम में पैरामीटर के लिए req को भी हटा देता है। – Jerry

+3

उदाहरण प्रदान करने के लिए धन्यवाद। – Cody

+0

धन्यवाद यह काम करता है –

4

दूसरों के रूप में उल्लेख किया है, आप क्रम में गैर पारित करने के लिए क्वेरी स्ट्रिंग का उपयोग करना चाहिए: यूआरआई के विभिन्न भागों के बारे में अधिक जानकारी के लिए विकिपीडिया पर

[OperationContract] 
[WebGet(UriTemplate = "/foo?id={id}")] 
string GetFoo(int id); 

देखें "URI योजना": यह मेरे लिए काम किया -स्ट्रिंग पैरामीटर। निम्नलिखित आलेख बताते हैं कि पार्सिंग कैसे किया जाता है।

WCF Extensibility – QueryStringConverter

"उचित" WCF तानाना के लिए वापस आ रहा है, इस सप्ताह के पद QueryStringConverter बारे में है। यह वास्तव में कवर करने के लिए एक साधारण विषय है, क्योंकि इसका उद्देश्य काफी विशिष्ट है (इससे पहले देखा गया अन्य एक्स्टेंसिबिलिटी पॉइंट्स के विपरीत, विभिन्न प्रकार के मामलों के लिए उपयोग किया जा सकता है) - डब्ल्यूसीएफ के भीतर क्वेरीरींग कनवर्टर केवल एंडपॉइंट्स पर उपयोग किया जाता है जिसमें WebHttpBehavior उन्हें लागू किया गया है। और यहां तक ​​कि उन है, केवल संचालन जो क्वेरी स्ट्रिंग के माध्यम से पारित कर दिया पैरामीटर पर में (या तो आपरेशन [WebGet] या एक [WebInvoke] एक UriTemplate कि स्पष्ट रूप से क्वेरी स्ट्रिंग के लिए कुछ मानकों बांधता साथ आपरेशन के साथ चिह्नित मानकों के साथ ) । एक QueryStringConverter वह टुकड़ा है जो ऑपरेशन पैरामीटर और क्वेरी स्ट्रिंग में उनके प्रतिनिधित्व के बीच परिवर्तित हो सकता है।

...

डिफ़ॉल्ट WebHttpBehavior द्वारा प्रयोग किया जाता QueryStringConverter, सब सरल अंकीय प्रकार (बाइट, SByte, int16, Int32, Int64, UInt16, UInt32, UInt64, एकल सहित देशी रूप कई प्रकार, का समर्थन करता है डबल, दशमलव), बूलियन, चार, वस्तु, स्ट्रिंग DATETIME,, DateTimeOffset, TimeSpan, Guid, उरी, और बाइट (अनिवार्य रूप से की सरणियों, सभी प्रकार जो DataContractSerializer "पुरातन" मानता है, साथ XmlQualifiedName का अपवाद)। गणना प्रकार डिफ़ॉल्ट द्वारा समर्थित हैं (enum मानों का स्ट्रिंग प्रस्तुति उपयोग किया जाता है)। आखिरकार, एक और प्रकार का प्रकार भी है जो को डिफ़ॉल्ट क्वेरीरीस्ट्रिंग कनवर्टर द्वारा समर्थित किया गया है - कोई भी जो [टाइपकॉन्टर] विशेषता को एक प्रकार कनवर्टर के साथ घोषित करता है जो स्ट्रिंग्स से और उसके ऊपर टाइप कर सकता है (नीचे उस पर अधिक)।

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

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