2010-11-23 9 views
96

Ich erstelle eine Web-Anfrage in ASP.NET und ich muss eine Menge Daten in den Körper hinzufügen. Wie mache ich das?Festlegen der Körperdaten einer WebRequest

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

Antwort

85

Mit HttpWebRequest.GetRequestStream

Codebeispiel von 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); 

Von einem meiner eigenen Code:

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; 
} 
+0

Hallo Torbjorn, ich benutze die Anfrage, so kann ich die 'request.GetResponse();', im obigen Beispiel wie würde das funktionieren? –

+0

Wenn Sie GetRequestStream() aufrufen, wird der Aufruf an den Server gesendet. Sie müssten das also am Ende des obigen Beispiels hinzufügen. –

+0

Gibt es eine Möglichkeit, den vollständigen Text in einem Anforderungsobjekt zu Debugzwecken anzuzeigen? Ich habe versucht, es zu serialisieren und habe versucht, einen StreamReader zu verwenden, aber egal, was ich tue, kann ich die Daten nicht sehen, die ich gerade an die Anfrage schrieb. – James

34

sollte diese helfen:

var request = (HttpWebRequest)WebRequest.Create("http://example.com/page.asp"); 

string stringData = ""; //place body here 
var data = Encoding.ASCII.GetBytes(stringData); // or UTF8 

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

var newStream = request.GetRequestStream(); 
newStream.Write(data, 0, data.Length); 
newStream.Close(); 
+0

Vermissen Sie etwas? Wie ein httpWReq.Content = newStream; Sie verwenden Ihr newStream-Objekt nicht mit Ihrer webRequest. – Yogurtu

+2

Um @ Yogurtis Frage der Vollständigkeit halber zu beantworten, schreibt das 'Stream'-Objekt, auf das' newStream' verweist, direkt in den Hauptteil der Anfrage. Auf den Aufruf von 'HttpWReq.GetRequestStream()' wird zugegriffen. Es ist nicht notwendig, etwas anderes auf die Anfrage zu setzen. – MojoFilter