我在我的项目中使用 SharpSvn 与 SVN 进行通信。对于某些 SVN 存储库,我已经知道用户名和密码,而对于其他存储库,我不知道。因此,我将该SvnClient.Authentication.DefaultCredentials
属性设置为我自己的System.Net.ICredentials
(伪代码)实现的一个实例:
public class MyCredentials : ICredentials
{
public NetworkCredential GetCredential(Uri uri, string authType)
{
if (AreCredentialsKnown(uri))
return new NetworkCredential("KnownUserName", "KnownPassword");
else
return null;
}
}
这适用于已知凭据。但是,如果凭据未知,NullReferenceException
则会在 SharpSvn 中出现 a:
Object reference not set to an instance of an object.
at System.Net.NetworkCredential.InternalGetUserName()
at System.Net.NetworkCredential.get_UserName()
at SharpSvn.Implementation.SvnCredentialWrapper.OnUserNamePassword(Object sender, SvnUserNamePasswordEventArgs e) in f:\qqn\sharpsvn-dist-1.6\src\sharpsvn\svnauthentication.h:line 619
这显然是由于我null
从 GetCredential 方法返回的事实造成的。但是,正如ICredentials 接口上的 MSDN 文档中明确指出的那样:
GetCredential方法返回一个 NetworkCredential 实例,其中包含与指定 URI 和授权方案关联的凭据。当没有可用的凭据时,GetCredential方法返回null。
这是 SharpSvn 中的错误吗?否则,当凭据未知时我应该返回什么?
编辑:我刚刚发现我可以返回new NetworkCredentials()
而不是null
向 SharpSvn 表明凭据未知。尽管如此,我认为这是 SharpSvn 中的一个错误,因为返回null
应该同样有效。