WebRequest'in gövde verilerini ayarlama


122

ASP.NET'te bir web isteği oluşturuyorum ve gövdeye bir sürü veri eklemem gerekiyor. Bunu nasıl yaparım?

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

Yanıtlar:


108

İle HttpWebRequest.GetRequestStream

Http://msdn.microsoft.com/en-us/library/d4cek6cc.aspx'den kod örneği

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

Kendi kodumdan birinden:

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

Merhaba Torbjorn, 'request.GetResponse ();' i alabilmek için isteği kullanıyorum, yukarıdaki örnekte bu nasıl çalışır?
William Calleja

GetRequestStream () 'i çağırdığınızda, sunucuya çağrı yapar. Yani, bunu yukarıdaki örneğin sonuna eklemeniz gerekir.
Torbjörn Hansson

1
Hata ayıklama amacıyla bir istek nesnesinin içindeki tam metni görmenin bir yolu var mı? Serileştirmeyi denedim ve bir StreamReader kullanmayı denedim, ancak ne yaparsam yapayım istek için yazdığım verileri göremiyorum.
James

Fan-lanet-tastik!

@James, isteğin tamamını gövdesiyle görmek için fiddler veya wireshark kullanabilmelisiniz.
RayLoveless

49

Güncelleme

Diğer SO cevabıma bakın.


orijinal

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();

Bir şey mi kaçırıyorsun Bir httpWReq.Content = newStream gibi; newStream nesnenizi webRequest ile kullanmıyorsunuz.
Yogurtu

4
@ Yogurtu'nun eksiksizlik sorusunu yanıtlamak için, doğrudan isteğin gövdesine yazmayı işaret eden Streamnesne newStream. Çağrıyla erişilir HttpWReq.GetRequestStream(). İstek üzerine başka bir şey ayarlamaya gerek yoktur.
MojoFilter

0

Bu konudaki cevapların hepsi harika. Yine de bir tane daha teklif etmek isterim. Büyük olasılıkla size bir api verildi ve bunu c # projenize dahil etmek istiyorsunuz. Postman'ı kullanarak, api çağrısını orada kurabilir ve test edebilirsiniz ve düzgün çalıştıktan sonra, basitçe 'Kod'a tıklayabilirsiniz ve üzerinde çalıştığınız istek ac # parçacığına yazılır. bunun gibi:

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

Yukarıdaki kod, kolayca kurabileceğiniz nuget paketi RestSharp'a bağlıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.