c# मुझे 411 लंबाई की आवश्यक त्रुटि क्यों मिली?




.net httprequest (7)

यह है कि मैं .NET के साथ किसी सेवा को कैसे कॉल करता हूं:

var requestedURL = "https://accounts.google.com/o/oauth2/token?code=" + code + "&client_id=" + client_id + "&client_secret=" + client_secret + "&redirect_uri=" + redirect_uri + "&grant_type=authorization_code";
HttpWebRequest authRequest = (HttpWebRequest)WebRequest.Create(requestedURL);
authRequest.ContentType = "application/x-www-form-urlencoded";
authRequest.Method = "POST";
WebResponse authResponseTwitter = authRequest.GetResponse();

लेकिन जब इस विधि को लागू किया जाता है, मुझे मिलता है:

अपवाद विवरण: System.Net.WebException: दूरस्थ सर्वर ने एक त्रुटि दी: (411) लंबाई आवश्यक।

मुझे क्या करना चाहिए?


var requestedURL = "https://accounts.google.com/o/oauth2/token?code=" + code + "&client_id=" + client_id + "&client_secret=" + client_secret + "&redirect_uri=" + redirect_uri + "&grant_type=authorization_code";
HttpWebRequest authRequest = (HttpWebRequest)WebRequest.Create(requestedURL);
authRequest.ContentType = "application/x-www-form-urlencoded";
authRequest.Method = "POST";
//Set content length to 0
authRequest.ContentLength = 0;
WebResponse authResponseTwitter = authRequest.GetResponse();

ContentLength संपत्ति में अनुरोध के साथ Content-length HTTP हेडर के रूप में भेजने के लिए मूल्य शामिल है।

ContentLength संपत्ति में -1 के अलावा कोई भी मान इंगित करता है कि अनुरोध डेटा अपलोड करता है और केवल वे तरीके जो डेटा अपलोड करते हैं, उन्हें विधि गुण में सेट करने की अनुमति है।

ContentLength गुण मान पर सेट होने के बाद, बाइट्स की संख्या अनुरोध स्ट्रीम में लिखी जानी चाहिए जिसे GetRequestStream विधि या BeginGetRequestStream और EndGetRequestStream दोनों तरीकों से कॉल करके लौटाया जाता है।

अधिक जानकारी के लिए here क्लिक here


अरे मैं वॉली का उपयोग कर रहा हूं और 411 सर्वर त्रुटि हो रही थी, मैंने गेटहेडर्स विधि को निम्नलिखित पंक्ति में जोड़ा:

params.put("Content-Length","0");

और इसने मेरी समस्या हल कर दी


जब मैंने फ़िडलर से वेब अनुरोधों को विज़ुअल स्टूडियो वेबस्टैट्स पर आयात किया था, तो मुझे वही त्रुटि मिली थी। कुछ POST अनुरोधों में StringHttpBody टैग नहीं था। मैंने उनके साथ एक खाली जोड़ा और त्रुटि चली गई। हेडर टैग के बाद इसे जोड़ें:

    <StringHttpBody ContentType="" InsertByteOrderMark="False">
  </StringHttpBody>

जब आप HttpWebRequest और POST विधि का उपयोग कर रहे हैं, तो आपको RequestStream के माध्यम से एक सामग्री (या यदि आप चाहें तो एक निकाय) सेट करना होगा। लेकिन, आपके कोड के अनुसार, difRequest.Method = "GET" का उपयोग करना पर्याप्त होना चाहिए।

यदि आप POST प्रारूप के बारे में सोच रहे हैं, तो यहां आपको क्या करना है:

ASCIIEncoding encoder = new ASCIIEncoding();
byte[] data = encoder.GetBytes(serializedObject); // a json object, or xml, whatever...

HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Method = "POST";
request.ContentType = "application/json";
request.ContentLength = data.Length;
request.Expect = "application/json";

request.GetRequestStream().Write(data, 0, data.Length);

HttpWebResponse response = request.GetResponse() as HttpWebResponse;

जिस तरीके से आपने POST से GET तक की विधि का अनुरोध किया है उसे बदलें।


गूगल खोज

दूसरा परिणाम

System.Net.WebException: The remote server returned an error: (411) Length Required.

यह एक बहुत ही सामान्य मुद्दा है जो POST के माध्यम से REST आधारित API पद्धति को कॉल करने का प्रयास करते समय आता है। सौभाग्य से, इस एक के लिए एक सरल तय है।

यह वह कोड है जिसका उपयोग मैं विंडोज एज़्योर मैनेजमेंट एपीआई को कॉल करने के लिए कर रहा था। इस विशेष API कॉल को POST के रूप में सेट करने के लिए अनुरोध विधि की आवश्यकता होती है, हालांकि ऐसी कोई जानकारी नहीं है जिसे सर्वर को भेजने की आवश्यकता है।

var request = (HttpWebRequest) HttpWebRequest.Create(requestUri);
request.Headers.Add("x-ms-version", "2012-08-01"); request.Method =
"POST"; request.ContentType = "application/xml";

इस त्रुटि को ठीक करने के लिए, एपीआई कॉल करने से पहले अपने अनुरोध में एक स्पष्ट सामग्री लंबाई जोड़ें।

request.CententLength = 0;


जब आप POST HttpWebRequest बनाते हैं, तो आपको अपने द्वारा भेजे जा रहे डेटा की लंबाई निर्दिष्ट करनी चाहिए, जैसे कुछ:

string data = "something you need to send"
byte[] postBytes = Encoding.ASCII.GetBytes(data);
request.ContentLength = postBytes.Length;

यदि आप कोई डेटा नहीं भेज रहे हैं, तो इसे 0 पर सेट करें, इसका मतलब है कि आपको बस अपने कोड को इस पंक्ति में जोड़ना होगा:

request.ContentLength = 0;

आमतौर पर, यदि आप कोई डेटा नहीं भेज रहे हैं, तो इसके बजाय GET विधि को चुनना समझदारी है, जैसा कि आप HTTP RFC में देख सकते हैं







http-status-code-411