He estado trabajando en mi cerebro durante unos días tratando de obtener una lista de calendarios de Google usando DotNetOpenAuth.DotNetOpenAuth con Google Calendar Feed
Puedo obtener con éxito una lista de contactos utilizando las muestras de DotNetOpenAuth. Lo he integrado con mi dominio usando OpenId + OAuth. Todo funciona bien para obtener una lista de contactos.
De ahí que modifiqué el código para tratar de recuperar una lista de calendarios y sigo obteniendo un error 401 no autorizado.
Sé que está autorizando porque puedo obtener la lista de contactos. ¿Alguien tiene un ejemplo de código de cómo están recuperando calendarios o eventos de calendario usando DotNetOpenAuth con Google?
Gracias
Actualización:
Gracias por la respuesta. He leído todo lo que puedo tener en mis manos. Aquí es lo que he hecho hasta ahora
Paso 1: He creado un nuevo GetCalendarEndPoint en los GoogleConsumer.cs
private static readonly MessageReceivingEndpoint GetCalendarEndpoint = new MessageReceivingEndpoint("https://www.google.com/calendar/feeds/default", HttpDeliveryMethods.GetRequest);
Paso 2: A continuación he creado un nuevo método GetCalendars el modelo del Método GetContacts en GoogleConsumer. cs - (reconstruido la DLL etc.)
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;
Paso 3: En mi Solicitud he modificado el ScopeURI al calendario de URI de GoogleConsumer como sigue
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;
}
Sin embargo, cuando ejecuto la aplicación consigo 401 no autorizado cuando hago la siguiente llamada
var calendars = GoogleConsumer.GetCalendars(Global.GoogleWebConsumer, State.GoogleAccessToken, 25, 1);
También han comprobado que existe el token State.GoogleAccess simplemente mostrarlo en la pantalla antes de disparar el método que hace esta llamada.
Una vez más, si exectute
var calendars = GoogleConsumer.GetContacs(Global.GoogleWebConsumer, State.GoogleAccessToken, 25, 1);
entonces funciona ??????? Gracias por tu ayuda.
¿Sería posible que tenga que ver con la forma en que estamos creando la solicitar ya que el punto final para Contactos es HTTP y el punto final para el Calendario es HTTPS? –
Absolutamente eso podría ser. Y, por supuesto, la creación de MessageReceivingEndpoint es el código que usted controla para que pueda ajustarlo. –
¿Puedes ver algo en mi código que estoy haciendo mal o señalarme en la dirección correcta? Esto realmente me está destrozando. –