我在我的項目中使用SharpSvn與SVN進行通信。對於某些SVN版本庫,我已經知道用戶名和密碼,而對於其他用戶,我不知道。因此,我的SvnClient.Authentication.DefaultCredentials
屬性設置爲我自己的實現的System.Net.ICredentials
(僞代碼)的一個實例:當提供的DefaultCredentials返回null時,SharpSvn的SvnClient中的NullReferenceException
public class MyCredentials : ICredentials
{
public NetworkCredential GetCredential(Uri uri, string authType)
{
if (AreCredentialsKnown(uri))
return new NetworkCredential("KnownUserName", "KnownPassword");
else
return null;
}
}
這工作得很好已知的憑據。但是,如果憑據不知道,一NullReferenceException
發生在SharpSvn:
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
引起的。然而,如明顯the MSDN documentation on the ICredentials interface指出:
的GetCredential方法返回一個包含與該指定的URI和授權方案相關聯的憑證一個的NetworkCredential實例。當沒有證書可用時,GetCredential方法返回null。
這是SharpSvn中的錯誤嗎?否則,當憑證未知時,我應該返回什麼?
編輯:我才發現,原來我可以返回new NetworkCredentials()
代替null
以指示SharpSvn的憑據是未知的。不過,我認爲這是SharpSvn中的一個錯誤,因爲返回null
應該同樣適用。