2013-08-06 15 views
21

से 404 रिटर्न मैं एक विधि है कि इस तरह की तरह दिखता है के साथ एक WebAPI नियंत्रक है:WebAPI विधि HttpClient

[HttpGet] 
[AcceptVerbs("GET")] 
public HttpResponseMessage Run(string reportName, int someId, string someText, DateTime asOfDate, string username) 

मैं इस कार्रवाई के लिए विशेष रूप से कॉन्फ़िगर किया गया एक कस्टम मार्ग की है। जब मैं वेब सेवा करने के लिए अपने ब्राउज़र नेविगेट, सब कुछ ठीक काम करता है, और समुचित कदम निष्पादित होने

http://localhost:xxxx/ControllerName/Run/asdf/1/asdf/07-01-2012/[email protected] 

हालांकि, जब मैं प्रोग्राम के उपयोग करते हुए HttpClient और क्रियान्वित करने के लिए एक "जाओ" मैं वेब सेवा को कॉल करने का प्रयास एक 404 त्रुटि। मुझे कोई त्रुटि नहीं मिलती है जब उपयोगकर्ता नाम पैरामीटर ईमेल पता नहीं होता है। उदाहरण के लिए, जब उपयोगकर्ता नाम केवल "उपयोगकर्ता" होता है तो सब कुछ ठीक काम करता है। यहां नमूना कोड है:

var url = "http://localhost:xxxx/ControllerName/Run/asdf/1/asdf/07-01-2012/[email protected]" 
var client = new System.Net.Http.HttpClient(); 
var response = client.Get(url); 

//fails here with 404 error 
response.EnsureSuccessStatusCode(); 

मैंने बिना किसी किस्मत के ईमेल पते को यूआरएलएनकोड करने का प्रयास किया है। किसी भी सलाह की सराहना की है।

+0

@ 40% -एडिट द्वारा प्रतिस्थापित करने का प्रयास करें- बस एक पूर्ण यादृच्छिक अनुमान। -Edit2- UrlEncoding को आपके लिए इसे स्विच करना चाहिए था, इसलिए यदि मैंने आपको जो बताया है, तो आप यह जांचना चाहेंगे कि आपने UrlEncoding और संभावित पैरामीटर का उपयोग कैसे किया। – Pluc

+2

आपके अनुरोध की जटिलता को ध्यान में रखते हुए आप 'POST' क्रिया का उपयोग करना चाहेंगे और इसके बजाय एक कस्टम जटिल ऑब्जेक्ट भेज सकते हैं। फिर आप कुछ अन्य समस्याओं को भी छोड़ देते हैं, जैसे किसी भी तार में चरित्र '/' को पारित करने की असंभवता। – user1908061

+0

@ प्लुक, मैंने आपके सुझाव को बिना किसी सफलता के शॉट के साथ एक शॉट दिया क्योंकि यह ठीक है कि यूरलेक क्या कर रहा था। धन्यवाद था। –

उत्तर

23

बस एक त्वरित विचार ... क्या ".com" समस्या पैदा कर सकता है?

+18

वाह, धन्यवाद! यह वास्तव में '।' था चरित्र मुद्दों का कारण बनता है न कि '@' प्रतीक। इस पोस्ट को देखने के बाद: http://stackoverflow.com/questions/13298542/apicontroller-returns-404-when-id-contains-period मैंने अभी अंतिम पैरामीटर के मार्ग में एक पिछला '/' जोड़ा है और यह एक जादू की तरह काम करता है। –

15

ऐसा इसलिए है क्योंकि आईआईएस विशेष पात्रों को मानचित्र बनाने की कोशिश कर रहा है। web.config के लिए निम्न जोड़ना इस मुद्दे को ठीक करना चाहिए:

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true" /> 
</system.webServer> 

अधिक यहाँ जानकारी: http://www.iis.net/configreference/system.webserver/modules

+0

यह ठीक है कि मुझे लगता है कि हम साथ जाएंगे, हालांकि मैं देखना चाहता हूं कि इसके कारण कोई अन्य समस्याएं उत्पन्न हो सकती हैं या नहीं। – Codeacula

+0

@ कोडेक्यूला खराब प्रदर्शन पर प्रबंधित मॉड्यूल का उपयोग स्थिर सामग्री की सेवा के लिए किया जाएगा। सामग्री के किसी भी प्रकार की आवश्यकता होने पर यह एक अच्छी बात होगी। – user2320464

0

आप एक बुनियादी URL क्वेरी की जरूरत है।

[Route("api/emails")] 
public HttpResponseMessage Run(string email) {...} 

GET api/[email protected]