2013-06-11 6 views
12

मैं अपने जीवन के लिए इसे समझ नहीं सकता। मेरे पास गेट और पोस्ट विधियों के साथ एक वेब एपीआई नियंत्रक है। गेट विधि पैरामीटर के साथ और बिना ठीक काम करता है, लेकिन जब मैं स्ट्रिंग पैरामीटर जोड़ने की कोशिश करता हूं तो पोस्ट ब्रेक होता है। नीचे मेरा कोड है।एएसपी.नेट वेबएपी पोस्ट विधि - 404 पैरामीटर पास करते समय

रूट:

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

नियंत्रक:

public class AuditController : ApiController 
{ 
    public String Post(String test) 
    { 
     return "Success : " + test; 
    } 

    public String Get(String test) 
    { 
     return "Success : " + test; 
    } 
} 

अनुरोध:

var request = WebRequest.Create("http://localhost:42652/Audit"); 
     request.Method = "POST"; 
     request.ContentType = "application/x-www-form-urlencoded"; 
     using (var writer = new StreamWriter(request.GetRequestStream())) 
     { 
      writer.Write("test=TEST"); 
     } 
     WebResponse webResponse = request.GetResponse(); 

मैं अनुरोध पर कई रूपों की कोशिश की है, मैं की तरह महसूस वहाँ कुछ सरल मैं हूँ लापता। आपकी सहायता के लिए धन्यवाद.

+1

आपका मार्ग कहता है कि इसमें 'id' नामक पैरामीटर है, लेकिन आपकी विधि में आप 'test' नामक पैरामीटर पास करते हैं। यह क्या होगा इसके अलावा आदिम प्रकार के मानकों को हमेशा उरी से पढ़ने की कोशिश की जाती है, इसलिए आपकी पोस्ट विधि काम नहीं करेगी। मैं वास्तव में आपको एएसपीनेट होमपेज पर सभी बहुत अच्छे एएसपी.Net वेब एपीआई ट्यूटोरियल्स के माध्यम से काम करने का सुझाव देता हूं! – JustAnotherUserYouMayKnow

+0

यह ^^ सटीक है? – Jonesopolis

+0

हां यह है। आपकी गेट-विधि {id} पैरामीटर के बिना रूट का प्रतिनिधित्व करती है - क्योंकि विधि में आपका आईडी पैरामीटर मौजूद नहीं है। आपका परीक्षण-पैरामीटर वैकल्पिक क्वेरी पैरामीटर में से एक है, जब आप 'ऑडिट? Test = value' कहते हैं, लेकिन' ऑडिट/वैल्यू 'पर नहीं। आपके द्वारा स्वीकार किए गए उत्तर में यह अच्छा है, लेकिन मैं अभी भी आपको ट्यूटोरियल्स के माध्यम से वास्तव में काम करने के लिए प्रोत्साहित करता हूं! – JustAnotherUserYouMayKnow

उत्तर

21

चूंकि आप अनुरोध के शरीर से आने के लिए पैरामीटर test की अपेक्षा कर रहे हैं, तो आपको FromBody विशेषता के साथ इसे सजाने की आवश्यकता होगी। उदाहरण: ([FromBody]String test)। यह अन्य जटिल प्रकारों के लिए सच नहीं है, उदाहरण के लिए: Employee कक्षा जिसे पूरी तरह से शरीर से आना माना जाता है।

अनुरोध प्राप्त करने के बारे में। http://blogs.msdn.com/b/jmstall/archive/2012/04/16/how-webapi-does-parameter-binding.aspx

इसके अलावा, मुझे लगता है कि आप WebRequest का उपयोग कर रहे हैं: यह परीक्षण क्वेरी स्ट्रिंग /Audit?test=Mike

से आने वाले ब्लॉग पोस्ट के बाद से ही काम करना चाहिए बाध्यकारी पैरामीटर के बारे में अधिक विवरण नहीं हैं। क्या आपने इसके बजाय System.Net.Http से HttpClient का उपयोग करने पर विचार किया है?

+0

मैंने FromBody विशेषता को जोड़ा, और यह अब सेवा तक पहुंच जाएगा, लेकिन पोस्ट विधि के अंदर 'टेस्ट' वैरिएबल दुर्भाग्य से शून्य है। मैं HttpClient पर भी एक नज़र डालेगा। – Jonesopolis

+0

अपने शरीर में केवल '= टेस्ट' भेजने का प्रयास करें। –

+0

शानदार है कि यह किया था! आपके निरीक्षण के लिए धन्यवाद – Jonesopolis

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