J'ai creusé mon cerveau pendant quelques jours en essayant d'obtenir une liste de calendriers de Google en utilisant DotNetOpenAuth.DotNetOpenAuth avec Google Calendar Feed
Je peux obtenir avec succès une liste de contacts en utilisant les échantillons DotNetOpenAuth. Je l'ai intégré avec mon domaine en utilisant OpenID + OAuth. Tout fonctionne bien pour obtenir une liste de contacts. À partir de là, j'ai modifié le code pour essayer de récupérer une liste de calendriers et je continue d'obtenir une erreur 401 non autorisée.
Je sais que c'est autorisé parce que je peux obtenir la liste de contacts. Quelqu'un at-il un exemple de code comment ils récupèrent des calendriers ou des événements de calendrier en utilisant le DotNetOpenAuth avec Google ???
Merci
Mise à jour:
Merci pour la réponse. J'ai lu tout ce que je peux trouver. Voici ce que je l'ai fait jusqu'à présent
Étape 1: Je créé un nouveau GetCalendarEndPoint dans les GoogleConsumer.cs
private static readonly MessageReceivingEndpoint GetCalendarEndpoint = new MessageReceivingEndpoint("https://www.google.com/calendar/feeds/default", HttpDeliveryMethods.GetRequest);
Étape 2: Ensuite, je créé une nouvelle GetCalendars méthode calquée sur la méthode GetContacts dans GoogleConsumer. cs - (Reconstruit la etc. dll)
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;
Étape 3: Dans ma demande j'ai modifié le ScopeURI à l'URI Calendrier de GoogleConsumer comme suit
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;
}
Cependant, quand je lance l'application que je reçois 401 Unauthorized quand je fais l'appel suivant
var calendars = GoogleConsumer.GetCalendars(Global.GoogleWebConsumer, State.GoogleAccessToken, 25, 1);
J'ai également vérifié que le jeton State.GoogleAccess existe en affichant simplement sur mon écran avant de déclencher la méthode qui fait cet appel.
Encore une fois, si j'exectute
var calendars = GoogleConsumer.GetContacs(Global.GoogleWebConsumer, State.GoogleAccessToken, 25, 1);
il fonctionne ??????? Merci pour ton aide.
aurait-il peut-être à voir avec la façon dont nous créons la demande car le point de fin pour Contacts est HTTP et le point de fin pour le calendrier est HTTPS? –
Absolument que ça pourrait être ça. Et bien sûr, la création de MessageReceivingEndpoint est du code que vous contrôlez, vous pouvez donc l'ajuster. –
Pouvez-vous voir quelque chose dans mon code que je fais mal ou pointez-moi dans la bonne direction. Cela me bouscule vraiment. –