当提供的DefaultCredentials返回null时,SharpSvn's SvnClient中的Null
本文关键字:SvnClient Null 中的 SharpSvn DefaultCredentials 返回 null | 更新日期: 2023-09-27 17:53:36
我在我的项目中使用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;
}
}
这对于已知凭据很有效。但是,如果凭据未知,则在SharpSvn中出现NullReferenceException
:
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
这显然是由于我从GetCredential方法返回null
造成的。但是,正如icredential接口上的MSDN文档明确指出的那样:
GetCredential方法返回一个NetworkCredential实例,其中包含与指定的URI和授权方案相关联的凭据。当没有可用的凭证时,GetCredential方法返回null。
这是SharpSvn的一个bug吗?否则,当凭据未知时,我应该返回什么?
编辑:我刚刚发现我可以返回new NetworkCredentials()
而不是null
来指示SharpSvn凭据未知。尽管如此,我认为这是SharpSvn中的一个bug,因为返回null
应该同样有效。
. defaultcredentials只是为Subversion库提供一个显式的用户名和密码的替代方法。
如果你需要一个更高级的提示机制,你应该钩住svnclient . authorization上的。usernamepassword事件。这也允许管理是否应该保存密码,等等。
在SharpSvn.UI.dll中有一个默认的实现,它挂钩了一些标准的对话框。