3

我有如下代码来对服务器进行 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自动处理?我不想冒险使用任何类型的双重编码。

4

1 回答 1

1

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 标头将自动添加到请求中。

于 2012-12-24T11:09:23.980 回答