【发布时间】:2010-12-05 04:54:19
【问题描述】:
我已经使用 .Net 的 WebClient 类编写了一个项目。它适用于 FTP 和 WebDAV 资源,但我怎样才能让它与 SCP 或 SFTP 一起使用?
【问题讨论】:
我已经使用 .Net 的 WebClient 类编写了一个项目。它适用于 FTP 和 WebDAV 资源,但我怎样才能让它与 SCP 或 SFTP 一起使用?
【问题讨论】:
.Net 框架不包含内置的 SCP 支持;试试SharpSSH。
FtpWebRequest 类通过设置 EnableSsl 属性来支持 FTPES,但 WebClient 不公开它,因此您必须直接使用 FtpWebRequest。
【讨论】:
您可以通过注册自己的前缀使 WebClient 与 FTP/SSL(但不是 SFTP)一起工作:
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;
}
}
完成此操作后,您几乎可以像平常一样使用 WebRequest,只是您的 URI 以“ftps://”而不是“ftp://”开头。一个警告是您必须指定方法,因为不会有默认方法。例如
// Note here that the second parameter can't be null.
webClient.UploadFileAsync(uploadUri, WebRequestMethods.Ftp.UploadFile, fileName, state);
【讨论】: