Można użyć FtpWebRequest; jest to jednak dość niski poziom. Istnieje klasa wyższego poziomu WebClient, która wymaga znacznie mniej kodu dla wielu scenariuszy; jednak nie obsługuje domyślnie protokołu FTP/SSL. Na szczęście, można dokonać WebClient
pracy z FTP/SSL, rejestrując swój własny prefiks:
private void RegisterFtps()
{
WebRequest.RegisterPrefix("ftps", new FtpsWebRequestCreator());
}
private sealed class FtpsWebRequestCreator : IWebRequestCreate
{
public WebRequest Create(Uri uri)
{
FtpWebRequest webRequest = (FtpWebRequest)WebRequest.Create(uri.AbsoluteUri.Remove(3, 1)); // Removes the "s" in "ftps://".
webRequest.EnableSsl = true;
return webRequest;
}
}
Gdy to zrobisz, możesz użyć WebClient
prawie jak normalny, z wyjątkiem, że URI zacząć „FTPS: //” zamiast "ftp: //". Jedynym zastrzeżeniem jest to, że musisz podać parametr method
, ponieważ nie będzie on domyślny. Na przykład.
using (var webClient = new WebClient()) {
// Note here that the second parameter can't be null.
webClient.UploadFileAsync(uploadUri, WebRequestMethods.Ftp.UploadFile, fileName, state);
}
Tylko niech ludzie wiedzą, darmowa wersja nie obsługuje FTPS, wersja pro robi – tsukimi