string postData ="firstone="+ inputData;ASCIIEncoding encoding =newASCIIEncoding();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);
Z jednego z moich własnych kodów:
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,newXmlWriterSettings(){Indent=true,NewLineHandling=NewLineHandling.Entitize,})){
cmisAtomEntry.WriteXml(xmlWriter);}try{return(HttpWebResponse)request.GetResponse();}catch(WebException wex){var httpResponse = wex.ResponseasHttpWebResponse;if(httpResponse !=null){thrownewApplicationException(string.Format("Remote server call {0} {1} resulted in a http error {2} {3}.",
method,
uri,
httpResponse.StatusCode,
httpResponse.StatusDescription), wex);}else{thrownewApplicationException(string.Format("Remote server call {0} {1} resulted in an error.",
method,
uri), wex);}}catch(Exception){throw;}
Cześć Torbjorn, używam żądania, więc mogę uzyskać 'request.GetResponse ();', w powyższym przykładzie jak by to działało?
William Calleja
Kiedy wywołujesz GetRequestStream (), wywołuje ona serwer. Musiałbyś więc dodać to na końcu powyższego przykładu.
Torbjörn Hansson
1
Czy istnieje sposób, aby wyświetlić pełny tekst wewnątrz obiektu żądania w celu debugowania? Próbowałem go serializować i próbowałem użyć StreamReadera, ale bez względu na to, co robię, nie widzę danych, które właśnie napisałem do żądania.
James
Fan-freaking-tastic!
@James, powinieneś być w stanie użyć fiddler lub wireshark, aby zobaczyć pełne żądanie wraz z jego treścią.
var request =(HttpWebRequest)WebRequest.Create("https://example.com/endpoint");string stringData ="";// place body herevar 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();
Brakuje Ci czegoś? Podobnie jak httpWReq.Content = newStream; nie używasz obiektu newStream w swoim webRequest.
Yogurtu
4
Aby odpowiedzieć na pytanie @ Yogurtu o kompletność, Streamobiekt, który newStreamwskazuje na zapisuje bezpośrednio do treści żądania. Jest dostępny przez wezwanie do HttpWReq.GetRequestStream(). Nie ma potrzeby ustawiania niczego innego w żądaniu.
MojoFilter
0
Wszystkie odpowiedzi w tym temacie są świetne. Chciałbym jednak zaproponować inny. Najprawdopodobniej otrzymałeś interfejs API i chcesz go umieścić w swoim projekcie C #. Używając Postmana, możesz tam skonfigurować i przetestować wywołanie api, a po poprawnym uruchomieniu wystarczy kliknąć „Kod”, a żądanie, nad którym pracujesz, zostanie zapisane w ac # snippet. lubię to:
Aktualizacja
Zobacz moją drugą odpowiedź SO.
Oryginalny
źródło
Stream
obiekt, którynewStream
wskazuje na zapisuje bezpośrednio do treści żądania. Jest dostępny przez wezwanie doHttpWReq.GetRequestStream()
. Nie ma potrzeby ustawiania niczego innego w żądaniu.Wszystkie odpowiedzi w tym temacie są świetne. Chciałbym jednak zaproponować inny. Najprawdopodobniej otrzymałeś interfejs API i chcesz go umieścić w swoim projekcie C #. Używając Postmana, możesz tam skonfigurować i przetestować wywołanie api, a po poprawnym uruchomieniu wystarczy kliknąć „Kod”, a żądanie, nad którym pracujesz, zostanie zapisane w ac # snippet. lubię to:
Powyższy kod zależy od pakietu NuGet RestSharp, który można łatwo zainstalować.
źródło