NullReferenceException в SharpSvn SvnClient, когда предоставленный DefaultCredentials возвращает ноль
Я использую 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:
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. Однако, как ясно указано в документации MSDN об интерфейсе ICredentials:
Метод GetCredential возвращает экземпляр NetworkCredential, который содержит учетные данные, связанные с указанным URI и схемой авторизации. Если учетные данные недоступны, метод GetCredential возвращает значение NULL.
Это ошибка в SharpSvn? В противном случае, что я должен вернуть, если учетные данные не известны?
Редактировать: я только что обнаружил, что могу вернуться new NetworkCredentials()
вместо null
указать SharpSvn, что учетные данные неизвестны. Тем не менее, я думаю, что это ошибка в SharpSvn, как возвращение null
должно работать одинаково хорошо.
1 ответ
.DefaultCredentials является только альтернативой для предоставления одного явного имени пользователя и пароля для библиотек Subversion.
Если вам нужен более продвинутый механизм запроса, вам нужно подключить событие.UserNamePassword к SvnClient.Autorization. Это также позволяет управлять сохранением паролей и т. Д.
В SharpSvn.UI.dll есть реализация по умолчанию, которая перехватывает некоторые стандартные диалоги.