我有一个FTPClient类封装了N多FtpWebRequest操作,例如Upload、Download等等。
public class FTPClient
{
private string m_url;
private string m_userName;
private string m_password;
... public FTPClient(string url, string userName, string password)
{
string m_url=url;
...
} public void Upload(string filePath)
{
FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(m_url));
reqFTP.Credentails = New NetworkCredential(m_userName, m_password);
...
}
}
因为最近一个500错误的Bug,我必须避免每次都给FtpWebRequest的Credentails属性赋一个新的NetworkCredential。我就在这个类的内部驻留一个字典:
public class FTPClient
{
private string m_url;
private string m_userName;
private string m_password;
private static Dictionary<string, NetworkCredential> s_credentialDict = new Dictionary<string, NetworkCredential>();
... public FTPClient(string url, string userName, string password)
{
string m_url=url;
m_credentialKey = FtpUserID + FtpPassword;
if (!s_credentialDict.ContainsKey(m_credentialKey))
{
s_credentialDict.Add(m_credentialKey, new NetworkCredential(FtpUserID, FtpPassword));
}
...
} public void Upload(string filePath)
{
FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(m_url));
reqFTP.Credentails = s_credentialDict[m_credentialKey];
...
}
}
刚刚在查资料的时候发现了CredentialCache这个类,不知道我这个地方是不是可以用它,怎么用?有什么好处?
public class FTPClient
{
private string m_url;
private string m_userName;
private string m_password;
... public FTPClient(string url, string userName, string password)
{
string m_url=url;
...
} public void Upload(string filePath)
{
FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(m_url));
reqFTP.Credentails = New NetworkCredential(m_userName, m_password);
...
}
}
因为最近一个500错误的Bug,我必须避免每次都给FtpWebRequest的Credentails属性赋一个新的NetworkCredential。我就在这个类的内部驻留一个字典:
public class FTPClient
{
private string m_url;
private string m_userName;
private string m_password;
private static Dictionary<string, NetworkCredential> s_credentialDict = new Dictionary<string, NetworkCredential>();
... public FTPClient(string url, string userName, string password)
{
string m_url=url;
m_credentialKey = FtpUserID + FtpPassword;
if (!s_credentialDict.ContainsKey(m_credentialKey))
{
s_credentialDict.Add(m_credentialKey, new NetworkCredential(FtpUserID, FtpPassword));
}
...
} public void Upload(string filePath)
{
FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(m_url));
reqFTP.Credentails = s_credentialDict[m_credentialKey];
...
}
}
刚刚在查资料的时候发现了CredentialCache这个类,不知道我这个地方是不是可以用它,怎么用?有什么好处?
我用Reflector看了看这个类,它内部维护一个以(url,authType)为键,NetworkCredential为值的哈希表,为每一个键存储一个NetworkCredential。
跟我自己实现的字典还是有一些出入,我是以密码账号为键的。