बाध्यकारी एमवीसी और वेब एपीआई के लिए अलग है। डिफ़ॉल्ट रूप से, एएसपी.नेट वेब एपीआई अनुरोध संदेश निकाय और यूआरआई, क्वेरी स्ट्रिंग इत्यादि से सरल प्रकारों से जटिल प्रकारों को बांधता है। चूंकि आपने Z
निर्दिष्ट किया है, जो एक वर्ग (जटिल प्रकार) है, यह बिना शरीर के क्रिया विधि पैरामीटर को पॉप्युलेट करता है आपको [FromBody]
निर्दिष्ट करना होगा। दूसरी तरफ, यदि आपका अनुरोध शरीर के बिना http://localhost:11485/api/profiles/aaa?a=1
है, तो यह आपके जटिल पैरामीटर से स्वचालित रूप से बाध्य नहीं होगा। उस स्थिति में, आपको [FromUri]
इस तरह निर्दिष्ट करना होगा: public HttpResponseMessage aaa([FromUri]Z z)
।
दूसरी ओर, कहें कि आपकी क्रिया विधि public HttpResponseMessage aaa(string a)
है। अब हमारे पास string
है, जो एक साधारण प्रकार है। इस मामले में, संदेश संदेश के बिना http://localhost:11485/api/profiles/aaa?a=1
वेब API को [FromUri]
निर्दिष्ट किए बिना पैरामीटर को सही ढंग से बांधने देगा। अब, यदि आप इस मामले में शरीर से बांधना चाहते हैं, तो आपको public HttpResponseMessage aaa([FromBody]string a)
निर्दिष्ट करना होगा। बेशक, a
के मुख्य नाम के बिना, application/x-www-form-urlencoded
के लिए, इस शरीर के लिए =1
होना चाहिए।
नीचे की रेखा - आपका पैरामीटर (सरल प्रकार या जटिल प्रकार) निर्धारित करता है कि वेब एपीआई कैसे बांधता है। इसे डिफ़ॉल्ट व्यवहार से अलग तरीके से काम करने के लिए, आपको FromUri
या FromBody
के माध्यम से बताना होगा।
पीएस। मैंने जो कुछ भी ऊपर बताया है वह अच्छी पुरानी एएसपी.नेट वेब एपीआई (2 सहित) के लिए पूरी तरह से अच्छा है। एएसपी.नेट 5.0 ए.के.ए. एएसपी.नेट वीएनएक्स्ट या एएसपी.नेट एमवीसी 6.0, एमवीसी और वेब एपीआई में एकीकृत किया गया है। शरीर से जटिल प्रकार को बांधने के लिए, आपको [FromBody]
निर्दिष्ट करना होगा।
दिलचस्प सवाल। मुझे यहां कुछ जानकारी मिली है: http://encosia.com/using-jquery-to-post-frombody-parameters-to-web-api/ –