2010-06-03 11 views
44

मैं डब्ल्यूसीएफ 4.0 में कुछ रीस्टफुल सेवाएं विकसित कर रहा हूं। मैं नीचे के रूप में एक विधि है:WCF में URITemplate में वैकल्पिक क्वेरी स्ट्रिंग पैरामीटर?

[OperationContract] 
    [WebGet(UriTemplate = "Test?format=XML&records={records}", ResponseFormat=WebMessageFormat.Xml)] 
    public string TestXml(string records) 
    { 
     return "Hello XML"; 
    } 

तो अगर मैं http://localhost:8000/Service/Test?format=XML&records=10 करने के लिए अपने ब्राउज़र नेविगेट करें, फिर सब कुछ के रूप में exepcted काम करता है।

हालांकि, मैं http://localhost:8000/Service/Test?format=XML पर नेविगेट करने में सक्षम होना चाहता हूं और URL के "& रिकॉर्ड्स = 10" भाग को छोड़ना चाहता हूं। लेकिन अब, मुझे सेवा त्रुटि मिलती है क्योंकि यूआरआई अपेक्षित यूआरआई टेम्पलेट से मेल नहीं खाता है।

तो मैं अपने कुछ क्वेरी स्ट्रिंग पैरामीटर के लिए डिफ़ॉल्ट कैसे कार्यान्वित करूं? उदाहरण के लिए मैं "रिकॉर्ड्स" को डिफ़ॉल्ट रूप से डिफ़ॉल्ट करना चाहता हूं यदि वह भाग क्वेरी स्ट्रिंग को छोड़ दिया गया है।

उत्तर

53

नोट: यह प्रश्न पुराना है, कृपया अन्य उत्तरों देखें।


यह समर्थित नहीं है।

हालांकि, माइक्रोसॉफ्ट इस मुद्दे के बारे में पता किया गया है और वहाँ एक काम के आसपास है:

आप अपने WebGet या WebInvoke पर UriTemplate से क्वेरी स्ट्रिंग को छोड़ते हुए द्वारा वांछित प्रभाव प्राप्त कर सकते हैं विशेषता, पैरामीटर पर WebOperationContext.Current.IncomingRequest.UriTemplateMatch.QueryParameters अपने हैंडलर के निरीक्षण के लिए, डिफ़ॉल्ट सेट इत्यादि।

https://connect.microsoft.com/VisualStudio/feedback/details/451296/

+1

में अपने डिफ़ॉल्ट मान सेट करना सुनिश्चित करें। हालांकि, अगर मैं इसके खिलाफ यूनिट परीक्षण चलाने की कोशिश करता हूं, तो यह अब काम नहीं करता है क्योंकि यूनिट टेस्ट में WebOperationContext नहीं है। मैंने कुछ उदाहरण देखे, लेकिन क्या किसी के पास WebOperationContext को नकल करने का एक सरल उदाहरण है? – Shafique

+0

गूगलिंग "मॉक वेबऑपरेशन कॉन्टेक्स्ट" का प्रयास करें। ऐसा करने के तरीके पर विभिन्न विचार हैं। – luksan

+0

आदमी को +1 दें, उसका समाधान काम करता है! यहाँ, मैं शुरू करूंगा। – EdgarVerona

4

चेक इस ब्लॉग बाहर पोस्ट। मुझे समझ में आता है, और क्वेरी स्ट्रिंग पैरामीटर को पार्स करने के लिए कक्षा के साथ आता है।

http://blogs.msdn.com/b/rjacobs/archive/2009/02/10/ambiguous-uritemplates-query-parameters-and-integration-testing.aspx

मूल रूप से तो यह पैरामीटर के बिना साथ/से मेल खाता है UriTemplate में क्वेरी स्ट्रिंग पैरामीटर परिभाषित नहीं करते हैं, और उन्हें पुनः प्राप्त करने के अगर वे विधि कार्यान्वयन में वहाँ हो नमूना वर्ग का उपयोग करें।

16

this answer के अनुसार यह .NET 4.0 में तय किया गया है। क्वेरी स्ट्रिंग पैरामीटर की आपूर्ति करने में विफल होने के परिणामस्वरूप इसे प्रकार के लिए डिफ़ॉल्ट मान दिया जा रहा है।

3

हाँ मैं पुष्टि कर सकता WCF 4.0 के बाद यह एक आकर्षण की तरह काम करता के रूप में यहाँ वर्णित WCF and optional parameters

2

यह WCF 4.0 में काम करने के लिए लगता है।
जस्ट सो कि अच्छी तरह से काम करने के लिए प्रकट होता है अपने "Service1.svc.cs"

public string TestXml(string records) 
{ 
    if (records == null) 
     records = "10"; 

    //... rest of the code 
} 
संबंधित मुद्दे