2012-12-24 56 views
3

我有如下所示的代碼做一個POST到服務器:在C#WebClient中使用UploadString時,是否需要編碼值?

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處理?我不想冒任何類型的雙重編碼。

回答

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頭將自動添加到請求中。

相關問題