当提供的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返回null时,SharpSvn's SvnClient中的Null

. defaultcredentials只是为Subversion库提供一个显式的用户名和密码的替代方法。

如果你需要一个更高级的提示机制,你应该钩住svnclient . authorization上的。usernamepassword事件。这也允许管理是否应该保存密码,等等。

在SharpSvn.UI.dll中有一个默认的实现,它挂钩了一些标准的对话框。