WebRequest के शरीर डेटा को सेट करना


122

मैं ASP.NET में एक वेब अनुरोध बना रहा हूं और मुझे शरीर में डेटा का एक गुच्छा जोड़ने की आवश्यकता है। मैं उसको कैसे करू?

var request = HttpWebRequest.Create(targetURL);
request.Method = "PUT";
response = (HttpWebResponse)request.GetResponse();

जवाबों:


107

साथ में HttpWebRequest.GetRequestStream

Http://msdn.microsoft.com/en-us/library/d4cek6cc.aspx से कोड उदाहरण

string postData = "firstone=" + inputData;
ASCIIEncoding encoding = new ASCIIEncoding ();
byte[] byte1 = encoding.GetBytes (postData);

// Set the content type of the data being posted.
myHttpWebRequest.ContentType = "application/x-www-form-urlencoded";

// Set the content length of the string being posted.
myHttpWebRequest.ContentLength = byte1.Length;

Stream newStream = myHttpWebRequest.GetRequestStream ();

newStream.Write (byte1, 0, byte1.Length);

मेरे अपने कोड से:

var request = (HttpWebRequest)WebRequest.Create(uri);
request.Credentials = this.credentials;
request.Method = method;
request.ContentType = "application/atom+xml;type=entry";
using (Stream requestStream = request.GetRequestStream())
using (var xmlWriter = XmlWriter.Create(requestStream, new XmlWriterSettings() { Indent = true, NewLineHandling = NewLineHandling.Entitize, }))
{
    cmisAtomEntry.WriteXml(xmlWriter);
}

try 
{    
    return (HttpWebResponse)request.GetResponse();  
}
catch (WebException wex)
{
    var httpResponse = wex.Response as HttpWebResponse;
    if (httpResponse != null)
    {
        throw new ApplicationException(string.Format(
            "Remote server call {0} {1} resulted in a http error {2} {3}.",
            method,
            uri,
            httpResponse.StatusCode,
            httpResponse.StatusDescription), wex);
    }
    else
    {
        throw new ApplicationException(string.Format(
            "Remote server call {0} {1} resulted in an error.",
            method,
            uri), wex);
    }
}
catch (Exception)
{
    throw;
}

हाय Torbjorn, मैं अनुरोध का उपयोग कर रहा हूं ताकि मुझे उपरोक्त अनुरोध में 'request.GetResponse ();' मिल सके, यह कैसे काम करेगा?
विलियम कैलेजा

जब आप GetRequestStream () कॉल करते हैं तो यह सर्वर को कॉल करता है। तो, आपको उपरोक्त उदाहरण के अंत में जोड़ना होगा।
तोर्बजर्न हैन्सन

1
क्या डिबगिंग उद्देश्यों के लिए अनुरोध ऑब्जेक्ट के अंदर पूर्ण पाठ देखने का एक तरीका है? मैंने इसे क्रमबद्ध करने की कोशिश की और एक स्ट्रीमराइडर का उपयोग करने की कोशिश की, लेकिन कोई फर्क नहीं पड़ता कि मैं क्या करता हूं मैं सिर्फ अनुरोध के लिए लिखे गए डेटा को नहीं देख सकता हूं।
जेम्स

फैन-गुस्सा-tastic!

@ जेम्स, आपको शरीर के साथ पूर्ण अनुरोध देखने के लिए फिडलर या वायरशार्क का उपयोग करने में सक्षम होना चाहिए।
रेवलेवेल्स

49

अपडेट करें

मेरे अन्य SO उत्तर देखें।


मूल

var request = (HttpWebRequest)WebRequest.Create("https://example.com/endpoint");

string stringData = ""; // place body here
var data = Encoding.Default.GetBytes(stringData); // note: choose appropriate encoding

request.Method = "PUT";
request.ContentType = ""; // place MIME type here
request.ContentLength = data.Length;

var newStream = request.GetRequestStream(); // get a ref to the request body so it can be modified
newStream.Write(data, 0, data.Length);
newStream.Close();

क्या आपको कुछ याद आ रहा है? HttpWReq.Content = newStream की तरह; आप अपने webRequest के साथ अपने newStream ऑब्जेक्ट का उपयोग नहीं कर रहे हैं।
योगर्टु

4
पूर्णता के लिए @ योगर्टु के प्रश्न का उत्तर देने के लिए, वह Streamवस्तु जो newStreamअनुरोध के निकाय को सीधे लिखने के लिए इंगित करती है। इसे कॉल द्वारा एक्सेस किया जाता है HttpWReq.GetRequestStream()। अनुरोध पर कुछ और सेट करने की आवश्यकता नहीं है।
मोजोफिल्टर

0

इस विषय में उत्तर सभी महान हैं। हालाँकि मैं एक और प्रस्ताव करना चाहूंगा। सबसे अधिक संभावना है कि आपको एक एपीआई दिया गया है और आप इसे अपने सी # प्रोजेक्ट में चाहते हैं। पोस्टमैन का उपयोग करके, आप एपी कॉल को वहां सेटअप और परीक्षण कर सकते हैं और एक बार ठीक से चलने के बाद, आप बस 'कोड' पर क्लिक कर सकते हैं और जिस अनुरोध पर आप काम कर रहे हैं, वह एसी # स्निपेट पर लिखा गया है। इस तरह:

var client = new RestClient("https://api.XXXXX.nl/oauth/token");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Basic   N2I1YTM4************************************jI0YzJhNDg=");
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddParameter("grant_type", "password");
request.AddParameter("username", "development+XXXXXXXX-admin@XXXXXXX.XXXX");
request.AddParameter("password", "XXXXXXXXXXXXX");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);

उपरोक्त कोड नगेट पैकेज रेस्टशार्प पर निर्भर करता है, जिसे आप आसानी से स्थापित कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.