2015-06-18 77 views
1

我看到線程在 How to check FTP connection? 並嘗試了一些建議。這是我目前有:檢測有效的FTP連接

private void IsFtpLoginSuccessful(FtpClient ftpClient, string ftpFolder, string ftpUsername, string ftpPassword) 
    { 
     FtpWebRequest requestDir = (FtpWebRequest)FtpWebRequest.Create(ftpFolder); 
     requestDir.Credentials = new NetworkCredential(ftpUsername, ftpPassword); 
     try 
     { 
      Log(LogLevel.Debug, "Just entered TRY block"); 
      requestDir.Method = WebRequestMethods.Ftp.ListDirectoryDetails; 
      WebResponse response = requestDir.GetResponse(); 
      Log(LogLevel.Debug, "GOOD"); 
     } 
     catch (Exception ex) 
     { 
      Log(LogLevel.Debug, "BAD"); 
     } 
    } 

如果用戶名/密碼無效,這是記錄的最後一件事是「剛進入TRY塊」。該代碼以某種方式默默地錯誤出來,從不記錄「壞」。如果憑證有效,則繼續執行並記錄「GOOD」。

我想這給了我一個布爾是否登錄是完全成功的。但是,有沒有辦法區分憑證是否損壞,或者它是否只是沒有響應的FTP服務器?

謝謝!

回答

1

您應該在從FTPWebRequest獲得的響應中使用狀態碼。

你可以看到一個完整列表here

在您的實現

private void IsFtpLoginSuccessful(FtpClient ftpClient, string ftpFolder, string ftpUsername, string ftpPassword) 
    { 
     FtpWebRequest requestDir = (FtpWebRequest)FtpWebRequest.Create(ftpFolder); 
     requestDir.Credentials = new NetworkCredential(ftpUsername, ftpPassword); 

     Log(LogLevel.Debug, "Just entered TRY block"); 
     requestDir.Method = WebRequestMethods.Ftp.ListDirectoryDetails; 
     FtpWebResponse response = (FtpWebResponse)requestDir.GetResponse(); 

     if(response.StatusDescription != FtpStatusCode.CommandOK || response.StatusDescription != FtpStatusCode.FileActionOK) 
      Log(LogLevel.Debug, "BAD"); 
    } 

這裏的MSDN上的樣本代碼的情況下。

public static bool MakeDirectoryOnServer (Uri serverUri) 
    { 
     // The serverUri should start with the ftp:// scheme. 
     if (serverUri.Scheme != Uri.UriSchemeFtp) 
     { 
      return false; 
     } 

     // Get the object used to communicate with the server. 
     FtpWebRequest request = (FtpWebRequest)WebRequest.Create (serverUri); 
     request.KeepAlive = true; 
     request.Method = WebRequestMethods.Ftp.MakeDirectory; 

     //Getting the status description 
     FtpWebResponse response = (FtpWebResponse)request.GetResponse(); 
     Console.WriteLine ("Status: {0}", response.StatusDescription); 
     return true; 
    }