2015-10-07 16 views
6

मैं पथ मानकों के साथ ट्रेन के साथ अपने एपीआई, एक पर तरीकों प्राप्त करने के लिए करना चाहते हैं:कैसे पथ से क्वेरी पैरामीटर भेद करने के लिए पैरामीटर

API/लोग/{personId}

और ? क्वेरी पैरामीटर के साथ ट्रेन के साथ एक:

API/लोगों पाठ = कुछ

लेकिन अगर मैं इस कोड डाल:

// GET: api/people/{personId} 
[Route("api/people/{personId}")] 
[HttpGet] 
public HttpResponseMessage Get(long personId) 
{ 
} 

// GET: api/people?text=something 
[Route("api/people")] 
[HttpGet] 
public HttpResponseMessage Get(string text) 
{ 
} 

और फिर /API/लोगों को खोलने का प्रयास/1 यह कहता है कि गलत प्रारूप और जब मैं /API/लोगों पाठ = कुछ को खोलने का प्रयास यह? काम करता है।

मैं केवल डिफ़ॉल्ट मार्ग को परिभाषित किया है:

config.Routes.MapHttpRoute(
     name: "DefaultApi", 
     routeTemplate: "api/{controller}/{id}", 
     defaults: new { id = RouteParameter.Optional } 
    ); 

मैं उन्हें कैसे हो सकता है दोनों काम कर रहे? परिभाषित करें कि यदि यह पथ पैरामीटर पहले पर जाता है और यदि यह एक क्वेरी पैरामीटर दूसरे पर जाता है?

+0

क्या होता है जब आप 'long' से' int' बदलते हैं? (जिज्ञासा से बाहर)। अच्छा सवाल, यद्यपि। मुझे जवाब (अभी तक) पर यकीन नहीं है। मैंने सोचा नहीं होगा कि आपको इस कोड को देखने से कोई समस्या होगी। –

+0

मैंने वेब एपीआई 2.2 के साथ इस सटीक परिदृश्य का परीक्षण किया है और यह काम करता है। मुझे लगता है कि आप पुराने वेब एपीआई संस्करण का उपयोग कर रहे हैं। –

+0

@JayMee 'long' या' int' परिणाम एक ही –

उत्तर

4

मैंने इसे वेब एपीआई 2 का उपयोग करके विजुअल स्टूडियो 2015 में रखा है और यह ठीक काम करता है। मुझे निम्नलिखित पंक्तियां जोड़नी पड़ीं (प्रत्येक नियंत्रक विधि के लिए एक)।

return Request.CreateResponse(HttpStatusCode.OK); 

मैंने डिफ़ॉल्ट रूट कॉन्फ़िगर भी हटा दिया। निम्नलिखित यूआरएल ठीक से काम

http://localhost:64377/api/people/1

http://localhost:64377/api/people?text=Hello

मैं अपने नियंत्रक में दोनों संबंधित तरीकों मारा जब मैं IE में इन यूआरएल डाल दिया।

+0

यह काम करता है मुझे लगता है कि समस्या डिफ़ॉल्ट रूट कॉन्फ़िगर था, धन्यवाद दोस्त! ;) –

+0

कोई समस्या नहीं है। चीयर्स! –

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