0

私の問題は、グーグルで連絡先を追加できないことです。私はasp.net2008を使用しています。グーグルカレンダーで使用している場合も同じですが、問題なく保存されています。トークンの問題なのか他の問題なのかわからないので、ここで質問することにしました。以下は連絡先を追加するための私のコードです

 protected void Create_Click()
    {

    GAuthSubRequestFactory authFactory_con = new GAuthSubRequestFactory("cp", "ContactApp");
    authFactory_con.Token = (String)Session["token"];
    ContactsService ser = new ContactsService(authFactory_con.ApplicationName);
    ser.RequestFactory = authFactory_con;               

    string str = "";



        ContactDetail contact = new ContactDetail
        {
            Name = NameTextBox.Text + " " + LastTextBox.Text,
            EmailAddress1 = primaryEmailTextBox.Text,
            EmailAddress2 = secondryEmailTextBox.Text,
            Phone = phoneTextBox.Text,
            Mobile = MobileTextBox.Text,
            Street = StreetTextBox.Text,
            City = CityTextBox.Text,
            Region = RegionTextBox.Text,
            PostCode = PostCodeTextBox.Text,
            Country = CountryTextBox.Text,
            Details = detailsTextBox.Text

        };

            GoogleContactService.AddContact(contact,ser);
            str = "<script>alert('Contact Added Sucessfully')</script>";

        Response.Write(str);   


}

上記の関数は、GoogleContactServiceのAddContact関数を呼び出します。以下は、連絡先機能の追加のコードです

   public void AddContact(ContactDetail contact, ContactsService GContactService)
     {
    ContactEntry newEntry = new ContactEntry();

    newEntry.Title.Text = contact.Name;
    //newEntry.Name.FullName = contact.Name;  

    newEntry.Name = new Name();     
    newEntry.Name.FullName = contact.Name;

    EMail primaryEmail = new EMail(contact.EmailAddress1);
    primaryEmail.Primary = true;
    primaryEmail.Rel = ContactsRelationships.IsWork;
    newEntry.Emails.Add(primaryEmail);

    EMail secondaryEmail = new EMail(contact.EmailAddress2);
    secondaryEmail.Rel = ContactsRelationships.IsHome;
    newEntry.Emails.Add(secondaryEmail);

    PhoneNumber phoneNumber = new PhoneNumber(contact.Phone);
    phoneNumber.Rel = ContactsRelationships.IsHome ;
    newEntry.Phonenumbers.Add(phoneNumber);

    PhoneNumber phoneNumber_ = new PhoneNumber(contact.Mobile );
    phoneNumber_.Primary = true;
    phoneNumber_.Rel = ContactsRelationships.IsMobile ;
    newEntry.Phonenumbers.Add(phoneNumber_);

    newEntry.PostalAddresses.Add(new StructuredPostalAddress()
    {
        Rel = ContactsRelationships.IsWork,
        Primary = true,
        Street = contact.Street  ,
        City = contact.City  ,
        Region = contact.Region  ,
        Postcode = contact.PostCode  ,
        Country = contact.Country  ,
        FormattedAddress = contact.Street + " , " + contact.City + " , " + contact.Region + " , " + contact.PostCode + " , " + contact.Country,
    });      
    newEntry.Content.Content = contact.Details;
    Uri feedUri = new Uri(ContactsQuery.CreateContactsUri("default"));

   // Uri feedUri = new Uri("http://www.google.com/m8/feeds/contacts/default/full");
    System.Net.ServicePointManager.Expect100Continue = false;
    ContactEntry createdEntry = (ContactEntry)GContactService.Insert(feedUri, newEntry);

}

ページの読み込み時にトークンを取得しています

以下は、連絡先を追加しようとしたときに発生するエラーです。

GDataRequestExceptionはユーザーコードによって処理されませんでしたリクエストの実行に失敗しました:https // www.google.com / m8 / feeds / contacts / default / full

4

1 に答える 1

0

さて、私は私の問題の解決策を得ました。それは非常にばかげた間違いです。

マルチスコープトークンを使用していたこと(カレンダーと連絡先用)マルチスコープトークンを取得するために、以下のコードを使用していました

 string nextUrl = Request.Url.ToString();
 const string scope = "http://www.google.com/calendar/feeds/%20http://www.google.com/m8/feeds/";
 const bool secure = false;
 const bool session = true;
 string authSubUrl = AuthSubUtil.getRequestUrl(nextUrl, scope, secure, session);
 Response.Redirect(authSubUrl);

上記の「const string scope」変数から、%20 を削除してスペースを空ける必要があります。Google API ドキュメントでは %20 と指定されていますが、機能しません。%20 を削除し、それらの間にスペースを追加する必要があります。以下の文字列のように。

 const string scope = "http://www.google.com/calendar/feeds/ http://www.google.com/m8/feeds/";

文字列で %20 を使用すると、2 番目ではなく最初のサービスにのみアクセスできます。

于 2013-01-01T09:30:31.563 に答える