在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处理自动在掩护下?我不想冒任何双重编码的风险

在c# WebClient中使用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头将自动添加到请求中。