在c# WebClient中使用UploadString时,是否需要对值进行编码?
本文关键字:编码 是否 WebClient UploadString | 更新日期: 2023-09-27 17:49:35
我有如下代码向服务器发送POST:
string URI = "http://mydomain.com/foo";
string myParameters =
"&token=1234" +
"&text=" + HttpUtility.UrlEncode(someVariable);
using (WebClient wc = new WebClient())
{
wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
string HtmlResult = wc.UploadString(URI, myParameters);
}
是否需要UrlEncode的参数,就像我正在做或UploadString
处理自动在掩护下?我不想冒任何双重编码的风险
是的,如果使用UploadString
方法,则需要对它们进行编码。
但是您可以为您的案例(UploadValues
)使用更智能的过载:
string URI = "http://mydomain.com/foo";
var values = new NameValueCollection
{
{ "token", "1234" },
{ "text", someVariable },
};
using (var wc = new WebClient())
{
byte[] result = wc.UploadValues(URI, values);
string htmlResult = Encoding.UTF8.GetString(result);
}
现在您不再需要担心任何编码。WebClient
在发送请求时将考虑到它们。此外,您还会注意到,我已经删除了您正在添加的application/x-www-form-urlencoded
,因为当您使用UploadValues
方法时,此Content-Type头将自动添加到请求中。