2015-12-30 11 views
10

में डेटा की अपेक्षा करते समय मुझे बॉडी एट्रिब्यूट की आवश्यकता क्यों है, मैं सर्वर पर अपना डेटा भेज सकता हूं लेकिन केवल जब मैं FromBody-विशेषता का उपयोग करता हूं।POST body

एक पोस्ट का उपयोग कर जेसन डेटा स्वचालित रूप से शरीर से क्यों नहीं पढ़ा जाता है?

बैकएंड वेब एपीआई

[HttpPost] 
public async Task<IActionResult> Post([FromBody]CreateSchoolyearRequestDTO dto) 
{ 

} 

दृश्यपटल AngularJS

this.createSchoolyear = function (schoolyear) { 
    var path = "/api/schoolyears"; 
    return $http({ 
     url: path, 
     method: "POST", 
     data: schoolyear, 
     contentType: "application/json" 
    }).then(function (response) { 
     return response; 
    }); 
}; 
+0

में इंजेक्ट किया जाना चाहिए क्योंकि आप पेलोड के रूप में पोस्ट डेटा भेज रहे हैं (पोस्ट शरीर में) – dfsq

उत्तर

19

केवल किसी चीज़ को एक पोस्ट अनुरोध है, वहाँ कोई स्पष्ट नियम कैसे तर्क स्थानांतरित किया जा रहा है। एक POST अनुरोध में अभी भी URL में एन्कोड किए गए क्वेरी पैरामीटर हो सकते हैं। एक विधि पैरामीटर "सरल" प्रकारों (स्ट्रिंग्स, इन्ट्स इत्यादि) के लिए क्वेरी पैरामीटर होने की उम्मीद है।

जटिल प्रकार आमतौर पर पोस्ट फॉर्म ऑब्जेक्ट्स होने की उम्मीद है। मानक एएसपी.NET POST अनुरोध एक फॉर्म सबमिट है, उदा। लॉग इन करते समय। उन अनुरोधों में पैरामीटर आमतौर पर application/x-www-form-urlencoded के रूप में एन्कोड किए जाते हैं, मूल रूप से कुंजी/मान जोड़े की एक स्ट्रिंग। जटिल पैरामीटर प्रकारों के लिए, उदा। फॉर्म व्यू मॉडल ऑब्जेक्ट्स, यह डिफ़ॉल्ट माना जाता है।

अन्य सभी गैर-डिफ़ॉल्ट स्थितियों के लिए, आपको स्पष्ट होना चाहिए कि विधि पैरामीटर कहां से आता है, अनुरोध में इसे कैसे स्थानांतरित किया जा रहा है। कि एक ही प्रपत्र डेटा क्षेत्र

  • FromHeaderAttribute से आते हैं मापदंडों के लिए - - उस अनुरोध शरीर
  • FromFormAttribute से आते हैं मापदंडों के लिए - मापदंडों के लिए

    • FromBodyAttribute: उस उद्देश्य के लिए, वहाँ अलग अलग विशेषताओं का एक संख्या में हैं पैरामीटर के लिए कि ro से आते हैं - पैरामीटर एक प्रश्न तर्क URL में एन्कोडेड
    • FromRouteAttribute से आते हैं के लिए - कि
    • FromQueryAttribute एक HTTP शीर्ष लेख क्षेत्र से आते हैं उटे डेटा
    • FromServicesAttribute - मापदंडों के लिए जिसके लिए सेवाएं विधि स्तरीय
  • +0

    पूरी तरह से भूल गया कि पोस्ट यूआरएल से भी पढ़ रहा है। तब से बॉडी समझ में आता है! – Pascal

    +0

    मुझे लगता है कि वेब एपीआई कैसे काम करती है, लेकिन अब वेब एपीआई और एमवीसी विलय कर रहे हैं यह एएसपी.नेट कोर के साथ एक तोड़ने वाला बदलाव है। मेरी पिछली वेब एपीआई परियोजना अपेक्षित के रूप में काम करती है, अब मुझे हर जगह [FromBody] रखना है। '[FromBody] 'JSON.net को –

    +1

    @ ल्यूकटीओ'ब्रायन हां, एएसपी.नेट कोर क्लासिक एएसपी.नेट एमवीसी/वेबएपीआई के लिए जानबूझकर असंगत है। इस प्रकार, आप परिवर्तन तोड़ने की उम्मीद है। - एपीआई नियंत्रकों के लिए, आप अनुमानित 'FromBody' मॉडल बाध्यकारी ([कुछ अन्य सम्मेलनों] के साथ (https: // ब्लॉग्स) को सक्षम करने के लिए एएसपी.NET कोर 2.1 से शुरू होने वाली' [एपीकंट्रोलर] 'विशेषता का उपयोग करने में सक्षम होंगे। msdn.microsoft.com/webdev/2018/02/02/asp-net-core-2-1-roadmap/#mvc)), इसलिए आपको अब हर कार्रवाई पर विशेषता की आवश्यकता नहीं होगी। – poke