एक आरईएसटी डब्ल्यूसीएफ यूआरएल में बैकस्लैश (% 5 सी) का उपयोग करना

मैं डब्ल्यूसीएफ पर एक आरईएसटी सेवा का निर्माण कर रहा हूं, और जिस तरीके से मैं लिख रहा हूं वह गेटप्रोफाइल है, जो किसी दिए गए उपयोगकर्ता नाम के लिए प्रोफाइल वापस कर देगा। उपयोगकर्ता नाम में उपयोगकर्ता का डोमेन शामिल होगा, और इसलिए निम्न प्रारूप होगा: "DOMAIN \ username"।

इसलिए मेरे पास Profiles.svc नामक एक सेवा है, जिसमें निम्न एंडपॉइंट सेट अप है:

[OperationContract]
[WebGet(UriTemplate = "/{username}", ResponseFormat = WebMessageFormat.Xml)]
IRestResponse GetProfile(String username);

हालांकि, जब मैं http: //server/profiles.svc/DOMAIN%5cusername <�पर सेवा देखने का प्रयास करता हूं (% 5c बैकस्लैश का urlencoded रूप है) मुझे निम्न त्रुटि मिलती है:

Server error in '/' Application
HTTP Error 400 - Bad Request

यह तब भी होता है जब गेटप्रोफाइल के मेरे कार्यान्वयन में वास्तव में कोई कोड परिभाषित नहीं किया जाता है, इसलिए मेरा मानना ​​है कि इस बिंदु पर त्रुटि को फेंक दिया जा रहा है डब्लूसीएफ ने यूआरआई को एक विधि में बांधने का प्रयास किया है।

क्या आरईएसटी डब्ल्यूसीएफ सेवा में यूआरएल में बैकस्लाश जोड़ने की अनुमति देने के लिए मुझे कुछ वेब सेटिंग्स कॉन्फ़िगरेशन में जोड़ने की ज़रूरत है? या बैकस्लाश की अनुमति नहीं है?

1

1 उत्तर

मुझे संदेह है कि यूआरएल के उस हिस्से में उन्हें बस अनुमति नहीं है। जब तक वे एन्कोड किए जाते हैं तब तक वे क्वेरी स्ट्रिंग में ठीक होते हैं। एक सामान्य नियम के रूप में मैं यूआरएल के पथ भाग में कुछ भी नहीं डालूंगा जो फ़ाइल नाम में अमान्य है (यानी?)।

शायद आप उपयोगकर्ता नाम से डोमेन को हटाने के लिए एक अलग चरित्र का उपयोग कर सकते हैं।

आप उपयोगकर्ता नाम को डोमेन नाम और उपयोगकर्ता नाम में भी अलग कर सकते हैं और सामान्य पथ deliminator '/' का उपयोग कर सकते हैं। मैं यह जानने के लिए पर्याप्त नहीं हूं कि यह सुनिश्चित करने के लिए कि आप इसे कैसे सुनिश्चित करते हैं, लेकिन यह मेरा सबसे अच्छा अनुमान होगा।

[OperationContract]
[WebGet(UriTemplate = "/{domainName}/{username}", ResponseFormat = WebMessageFormat.Xml)]
IRestResponse GetProfile(String domainName, String username);
5
जोड़ा
अच्छा समाधान हमें आरईएसटी यूआरएल से भी बाहर निकलना पड़ा।
जोड़ा लेखक Muhammedh, स्रोत
ऐसा करने का सही तरीका यह है (/ {domainName}/{userName}) डोमेन के रूप में और नाम का एक पदानुक्रमित संबंध है जो REST के साथ अच्छी तरह से व्यक्त किया जाता है।
जोड़ा लेखक James Bender, स्रोत