Od kilku dni próbuję uzyskać listę kalendarzy od Google za pomocą DotNetOpenAuth.DotNetOpenAuth z kanałem kalendarza Google
Udało mi się uzyskać listę kontaktów za pomocą próbek DotNetOpenAuth. Zintegrujełem go z moją domeną przy użyciu OpenAd + OAuth. Wszystko działa świetnie, aby uzyskać listę kontaktów.
Stamtąd zmodyfikowałem kod, aby pobrać listę kalendarzy i nadal otrzymuję błąd 401 nieautoryzowany.
Wiem, że autoryzacja jest możliwa, ponieważ mogę uzyskać listę kontaktów. Czy ktoś ma przykład kodu, jak pobierają kalendarze lub zdarzenia kalendarza za pomocą DotNetOpenAuth z Google ???
Dzięki
Aktualizacja:
Dzięki za odpowiedź. Przeczytałem wszystko, co mogę dostać w swoje ręce. Oto co zrobiłem do tej pory
Krok 1: Stworzyłem nową GetCalendarEndPoint w GoogleConsumer.cs
private static readonly MessageReceivingEndpoint GetCalendarEndpoint = new MessageReceivingEndpoint("https://www.google.com/calendar/feeds/default", HttpDeliveryMethods.GetRequest);
Krok 2: Następnie stworzyłem nowe GetCalendars metody wzorowane na metodzie GetContacts w GoogleConsumer. cs - (przebudowany dll itd.)
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;
Krok 3: W mojej aplikacji zmodyfikował ScopeURI do Kalendarza URI z GoogleConsumer następująco
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;
}
Jednak gdy uruchamiam aplikację otrzymuję 401 Nieuprawnione kiedy robię następujące wywołanie
var calendars = GoogleConsumer.GetCalendars(Global.GoogleWebConsumer, State.GoogleAccessToken, 25, 1);
Mam również sprawdził, czy token State.GoogleAccess istnieje po prostu wyświetlając go na ekranie przed wyzwolić metoda, która wykonuje to połączenie.
Ponownie, jeśli exectute
var calendars = GoogleConsumer.GetContacs(Global.GoogleWebConsumer, State.GoogleAccessToken, 25, 1);
to działa ??????? Dzięki za pomoc.
Czy to może mieć do czynienia z sposób kreujemy żądanie, ponieważ punktem końcowym dla Kontaktów jest HTTP, a punktem końcowym kalendarza jest HTTPS? –
Absolutnie to może być to. Oczywiście tworzenie MessageReceivingEndpoint jest kodem, który kontrolujesz, dzięki czemu możesz to zmienić. –
Czy widzisz coś w moim kodzie robię źle lub wskaż mnie we właściwym kierunku. To mnie naprawdę denerwuje. –