我发现这段代码对我来说很有用,很容易使用,但是我遇到了一个简单的问题
private static string DoGET(string URL, NameValueCollection QueryStringParameters = null, NameValueCollection RequestHeaders = null)
{
string ResponseText = null;
using (WebClient client = new WebClient())
{
try
{
if (RequestHeaders != null)
{
if (RequestHeaders.Count > 0)
{
foreach (string header in RequestHeaders.AllKeys)
client.Headers.Add(header, RequestHeaders[header]);
}
}
if (QueryStringParameters != null)
{
if (QueryStringParameters.Count > 0)
{
foreach (string parm in QueryStringParameters.AllKeys)
client.QueryString.Add(parm, QueryStringParameters[parm]);
}
}
byte[] ResponseBytes = client.DownloadData(URL);
ResponseText = Encoding.UTF8.GetString(ResponseBytes);
}
catch (WebException exception)
{
if (exception.Response != null)
{
var responseStream = exception.Response.GetResponseStream();
if (responseStream != null)
{
using (var reader = new StreamReader(responseStream))
{
//Response.Write(reader.ReadToEnd());
}
}
}
}
}
return ResponseText;
}
我想将此代码转换为HTTP Post方法,当我将client.DownloadData(URL)更改为client.UploadValues(URL)时,它需要NameValueCollection作为第二个参数,但代码的顶部添加了它们进入客户端,
我不添加" QueryStringParameters"进入客户端并将其用作第二个参数?
答案 0 :(得分:0)
你问:我不添加" QueryStringParameters"进入客户端并将其用作第二个参数?
答案是:是的
WebClient类的QueryString
属性用于构建作为查询字符串附加到WebClient URI的名称/值对,因此主要用于Get请求。
假设你想要,你仍然可以:
byte[] ResponseBytes = client.UploadValues(URL, client.QueryString);
但这显然是浪费,因为你也可以直接传递它。