C# FTPWebRequest类的奇怪行为

C# FTPWebRequest类的奇怪行为,c#,.net,ftp,C#,.net,Ftp,使用FtpWebRequest类时,我注意到一种奇怪的行为。我想创建一个FtpWebRequest,从德国气象局获取一些数据。所以我做了如下事情: var request = (FtpWebRequest)WebRequest.Create(requestUri); request.Method = WebRequestMethods.Ftp.ListDirectoryDetails; request.Credentials = Credentials; var response = reque

使用FtpWebRequest类时,我注意到一种奇怪的行为。我想创建一个FtpWebRequest,从德国气象局获取一些数据。所以我做了如下事情:

var request = (FtpWebRequest)WebRequest.Create(requestUri);
request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
request.Credentials = Credentials;
var response = request.GetResponse() as FtpWebResponse;
使用此代码,我得到以下错误:

远程服务器返回错误:(407)代理身份验证 必需的

这是非常清楚的,我想添加一个代理将解决这个问题,但我发现了一些奇怪的事情。此代码正在运行:

var request = (FtpWebRequest)WebRequest.Create(requestUri);
request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
request.Credentials = Credentials;
request.Proxy = null;
var response = request.GetResponse() as FtpWebResponse;

有人能给我解释一下吗?我使用调试器在这两种情况下都将代理保存为null。为什么在第二种情况下我没有收到错误消息,反之亦然?

默认情况下,
WebRequest
使用系统范围的代理(IE设置中定义的代理)。如果该代理需要凭据,则需要提供凭据。通过将
Proxy
设置为null,可以使用直接连接完全绕过代理


你可以从中看到这一点。当您设置代理时,它的标志为true,这是在决定要使用的实际代理时。如果未明确指定代理,它将隐式使用
WebRequest。默认情况下,
WebRequest

使用系统范围的代理(IE设置中定义的代理)。如果该代理需要凭据,则需要提供凭据。通过将
Proxy
设置为null,可以使用直接连接完全绕过代理

你可以从中看到这一点。当您设置代理时,它的标志为true,这是在决定要使用的实际代理时。如果未显式指定代理,它将隐式使用
WebRequest.InternalDefaultWebProxy