Пример vb.net для получения контактов Google с помощью dotnetopenauth?

Я прочитал несколько сообщений здесь и нашел несколько примеров С#, но я не могу передать их на vb.net :-( Когда я перевожу пример OAuthConsumer из dotnetopenauth, я всегда получаю следующее сообщение об ошибке:

'DotNetOpenAuth.ApplicationBlock.InMemoryTokenManager' is not accessible in this context because it is 'Friend'.

в этой строке:

Private ReadOnly Property TokenManager() As InMemoryTokenManager

Есть ли рабочий пример для vb.net? Мне удалось использовать OpenID от dotnetopenauth для аутентификации в Google, но теперь я застрял в чтении контактов... Большое спасибо заранее!!


person K232    schedule 03.07.2011    source источник
comment
Это сообщение об ошибке не связано с текущим преобразованием между C# и VB.NET, но выглядит как изменение в API DotNetOpenAuth. Когда класс является другом, они действительно не хотят, чтобы вы получали к нему доступ. Итак, образец, который вы нашли, устарел...   -  person Jesper Blad Jensen    schedule 03.07.2011
comment
Образец включен в последнюю версию dotnetopenauth 3.4.7, доступную на dotnetopenauth.net . Там в OAuthConsumer.GoogleAddressbook.aspx.cs есть строка private InMemoryTokenManager TokenManager{, которая переводится, как указано выше.   -  person K232    schedule 03.07.2011
comment
Хорошо. Если вы являетесь владельцем InMemoryTokenManager (если он находится в ваших файлах кода), просто сделайте его общедоступным, а не Friend. Я думал, что это тип, который они предоставили в своей DLL :)   -  person Jesper Blad Jensen    schedule 04.07.2011
comment
@Jesper: Да, я не знал, что ApplicationBlock, включенный в dotnetopenauth, может / должен быть изменен, но сейчас я внес изменения, как предложено также Эндрю ниже, и теперь это работает. Спасибо!   -  person K232    schedule 04.07.2011


Ответы (1)


ApplicationBlock — это исходный дистрибутив в файле .zip, так что вы можете копировать и вставлять нужные вам фрагменты прямо в свой собственный проект, и в этом случае класс Friend должен работать для вас как нельзя лучше.

person Andrew Arnott    schedule 03.07.2011
comment
Отлично, это работает, спасибо! Еще один вопрос: как теперь избежать того, чтобы пользователь каждый раз нажимал «Предоставить доступ»? - person K232; 04.07.2011
comment
@ K232: Для этого следует задать новый вопрос. - person Valamas; 04.07.2011
comment
@Валамас: Хорошо, я так и сделаю. Я думаю, что мне нужно сохранить AccessToken, но я заметил, что он отличается для каждого запроса даже для одного и того же пользователя. Но, возможно, это вызвано повторным нажатием «Предоставить доступ», вероятно, поэтому Google каждый раз создает новый токен. Я сейчас попробую сохранить токен и посмотреть, работает ли он, иначе я опубликую новый вопрос. Спасибо! - person K232; 04.07.2011
comment
Это в некоторой степени связано с этим вопросом - это потому, что (вы могли заметить комментарий в InMemoryTokenManager) InMemoryTokenManager не для производственного использования. Вы должны хранить и токен доступа, и секрет токена, для чего и предназначен менеджер токенов, но для этого вам нужно написать собственную ITokenManager реализацию. - person Andrew Arnott; 04.07.2011
comment
@Andrew: Спасибо за разъяснения, я попробую и, возможно, подниму новый вопрос в случае проблем ;-) - person K232; 04.07.2011