Я несколько дней ломаю свой мозг, пытаясь получить список календарей Google, используя DotNetOpenAuth.DotNetOpenAuth с каналом Календаря Google
Я могу получить список контактов, используя образцы DotNetOpenAuth. Я интегрировал его с моим доменом, используя OpenId + OAuth. Все отлично работает, чтобы получить список контактов.
Итак, я изменил код, чтобы попытаться получить список календарей, и я продолжаю получать неавторизованную ошибку 401.
Я знаю, что это разрешение, потому что я могу получить список контактов. У кого-нибудь есть пример кода, как они извлекают календари или события календаря, используя DotNetOpenAuth с Google?
Благодаря
Update:
Спасибо за ответ. Я прочитал все, что мог. Вот то, что я сделал до сих пор
Шаг 1: Я создал новый GetCalendarEndPoint в GoogleConsumer.cs
private static readonly MessageReceivingEndpoint GetCalendarEndpoint = new MessageReceivingEndpoint("https://www.google.com/calendar/feeds/default", HttpDeliveryMethods.GetRequest);
Шаг 2: Затем я создал новый метод GetCalendars по образцу метода GetContacts в GoogleConsumer. CS - (перестроено дллы и т.д.)
public static XDocument GetCalendars(ConsumerBase consumer, string accessToken, int maxResults/* = 25*/, int startIndex/* = 1*/) {
if (consumer == null)
{
throw new ArgumentNullException("consumer");
}
var request = consumer.PrepareAuthorizedRequest(GetCalendarEndpoint, accessToken);
var response = consumer.Channel.WebRequestHandler.GetResponse(request);
string body = response.GetResponseReader().ReadToEnd();
XDocument result = XDocument.Parse(body);
return result;
Шаг 3: в моем приложении я модифицировал ScopeURI в календарном URI из GoogleConsumer следующего
private IAuthenticationRequest GetGoogleRequest()
{
Realm realm = Request.Url.Scheme + Uri.SchemeDelimiter + Global.GoogleTokenManager.ConsumerKey + "/";
IAuthenticationRequest authReq = relyingParty.CreateRequest(GoogleOPIdentifier, realm);
// Prepare the OAuth extension
string scope = GoogleConsumer.GetScopeUri(GoogleConsumer.Applications.Calendar);
Global.GoogleWebConsumer.AttachAuthorizationRequest(authReq, scope);
// We also want the user's email address
var fetch = new FetchRequest();
fetch.Attributes.AddRequired(WellKnownAttributes.Contact.Email);
authReq.AddExtension(fetch);
return authReq;
}
Однако, когда я запустить приложение я получаю 401 Несанкционированное когда я делаю следующий вызов
var calendars = GoogleConsumer.GetCalendars(Global.GoogleWebConsumer, State.GoogleAccessToken, 25, 1);
Я также проверил, что маркер State.GoogleAccess существует, просто отображая его на моем экране, прежде чем я спусковой крючок метод, который делает этот вызов.
Опять же, если я exectute
var calendars = GoogleConsumer.GetContacs(Global.GoogleWebConsumer, State.GoogleAccessToken, 25, 1);
затем он работает ??????? Спасибо за помощь.
ли это, возможно, придется делать с тем, как мы создаем запрос, поскольку конечной точкой для контактов является HTTP, а конечной точкой для календаря является HTTPS? –
Абсолютно это могло быть так. И, конечно же, создание MessageReceivingEndpoint - это код, которым вы управляете, чтобы вы могли его настроить. –
Можете ли вы что-нибудь увидеть в моем коде, я делаю неправильно или укажу на меня в правильном направлении. Меня это сильно забивает. –