formularze są składane w jednym z dwóch formatów: application/x-www-form-urlencoded i multipart/form-data.
WebClient zapewnia bardzo prosty i wygodny sposób przesyłania dowolnych danych do witryny internetowej. W przypadku aplikacji /x-www-form-urlencoded wszystko, co musisz zrobić, to dostarczyć NameValueCollection. W przypadku , wieloczęściowego/formularza danych, AFAIK, musisz sam utworzyć dane żądania (które mogą zawierać zarówno pliki, jak i pary wartości nazw).
application/x-www-form-urlencoded
NameValueCollection formData = new NameValueCollection();
formData["q"] = "c# webclient post urlencoded";
formData["btnG"] = "Google Search";
formData["hl"] = "en";
WebClient myWebClient = new WebClient();
myWebClient.UploadValues(uriString, formData);
WebClient.UploadValues ustawia metodę HTTP do "POST"
i Content-Type do "application/x-www-form-urlencoded"
, URL-koduje formData
i przesyłanie go do podaną uriString
.
multipart/form-data
string formData = @"--AaB03x
Content-Disposition: form-data; name=""submit-name""
Larry
--AaB03x
Content-Disposition: form-data; name=""files""; filename=""file1.dat""
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
" + Convert.ToBase64String(
File.ReadAllBytes("file1.dat"), Base64FormattingOptions.InsertLineBreaks) + @"
--AaB03x--
";
WebClient myWebClient = new WebClient();
myWebClient.Encoding = Encoding.ASCII;
myWebClient.Headers.Add("Content-Type", "multipart/form-data; boundary=AaB03x");
myWebClient.UploadString(uriString, formData);
Ustawia Content-Type do "multipart/form-data"
z granicy stosowanych w danych żądania. WebClient.UploadData ustawia metodę HTTP na "POST"
i przesyła tablicę bajtów do uriString
. Dane żądania w tym przykładzie zawierają plik file1.dat
i parametr formularza submit-name
, który jest ustawiony na Larry
. Format jest opisany w RFC2388.
Jaki problem masz z 'WebClient'? Trudniej byłoby być prostszym i nadal być przydatnym. –
Zobacz moje inne komentarze, ale konkretnie pojedynczy test POST, który przesyła zarówno plik, jak i niektóre parametry POST (np. Token uwierzytelniania pojedynczego w tym przypadku). – Greg