C# 设置WebRequest';人体数据
我正在ASP.NET中创建一个web请求,需要向正文中添加一组数据。我该怎么做C# 设置WebRequest';人体数据,c#,httpwebrequest,C#,Httpwebrequest,我正在ASP.NET中创建一个web请求,需要向正文中添加一组数据。我该怎么做 var request = HttpWebRequest.Create(targetURL); request.Method = "PUT"; response = (HttpWebResponse)request.GetResponse(); 更新 原创 var request = (HttpWebRequest)WebRequest.Create("https://example.com/endpoint"
var request = HttpWebRequest.Create(targetURL);
request.Method = "PUT";
response = (HttpWebResponse)request.GetResponse();
更新
原创
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();
使用
HttpWebRequest.GetRequestStream
源代码示例
来自我自己的代码之一:
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;
}
这个题目的答案都很好。不过我想提出另一个建议。最有可能的情况是,您已经获得了一个api,并希望将其应用到您的c#项目中。 使用Postman,您可以在那里设置和测试api调用,一旦api调用正常运行,您只需单击“代码”,就可以将您正在处理的请求写入c#snippet。像这样:
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);
上面的代码依赖于nuget软件包RestSharp,您可以轻松安装该软件包。Hi Torbjorn,我正在使用请求,以便获得“request.GetResponse();”,在上面的示例中,它是如何工作的?当您调用GetRequestStream()时,它会调用服务器。因此,您必须将其添加到上述示例的末尾。是否有一种方法可以查看请求对象内部的全文以进行调试?我尝试序列化它,并尝试使用StreamReader,但无论我做什么,我都看不到我刚刚写入请求的数据。Fan-freaking-tastic@詹姆斯,你应该可以用fiddler或wireshark来查看完整的请求,你是否遗漏了什么?像httpWReq.Content=newStream;您没有在webRequest中使用newStream对象。要回答@Yogurtu的完整性问题,
Stream
对象指向直接写入请求正文的newStream
。通过调用HttpWReq.GetRequestStream()
可以访问它。不需要在请求上设置任何其他内容。另外,在Postman窗口的右上方可以找到“Code”按钮,您可以在其中设置和测试api调用
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);