Ошибка # Неправильный путь requestMask.includeFields при выполнении People API
Я создаю веб-приложение в vs2017 для включения аутентификации Google. У меня есть страница Login.aspx, где при нажатии кнопки вызывается следующий код:
function onSignIn(googleUser) {
var profile = googleUser.getBasicProfile();
console.log('ID: ' + profile.getId()); // Do not send to your backend! Use an ID token instead.
// The ID token you need to pass to your backend:
var id_token = googleUser.getAuthResponse().id_token;
console.log("ID Token: " + id_token);
var xhr = new XMLHttpRequest();
xhr.open('POST', 'http://localhost:53028/1.aspx');
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.send('idtoken=' + id_token);
}
Это показывает мне экран входа в Google, и я могу войти.
Код на странице 1.aspx.cs:
using Google.Apis.Auth.OAuth2;
using Google.Apis.People.v1;
using System.Net;
using System.Threading;
using Google.Apis.Services;
using Google.Apis.People.v1.Data;
UserCredential credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
new ClientSecrets
{
ClientId = "1ghchabasa5.apps.googleusercontent.com",
ClientSecret = "AG0LvA1wZA11D"
},
new[] { "profile", "https://www.googleapis.com/auth/contacts.readonly" },
"me",
CancellationToken.None).Result;
// Create the service.
var service = new PeopleService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = "Ms_Test",
});
PeopleResource.GetRequest peopleRequest = service.People.Get("people/me");
peopleRequest.RequestMaskIncludeField = "person.names, person.emailAddresses";
Person profile = peopleRequest.Execute(); // Error on this line
Я хочу получить адрес электронной почты и день рождения зарегистрированного пользователя.
Я получаю ошибку:
Google.GoogleApiException: 'Google.Apis.Requests.RequestError
Неверный путь requestMask.includeFields: " person.email_addresses". [400]
Ошибки [
Сообщение [Неверный путь requestMask.includeFields: " person.email_addresses".] Местоположение [ - ] Причина [badRequest] Домен [глобальный]
2 ответа
В Google People API нам нужно указать одно из следующего:
- PersonFields
- Рекуестмаскинклудефиелд
Я также получал ту же ошибку для адресов электронной почты, я использовалPersonFields
, вы можете попробовать использовать PersonFields следующим образом:
var peopleService = new PeopleServiceService(new BaseClientService.Initializer
{
ApplicationName = "App.Test",
HttpClientInitializer = userCredential
});
var peopleResource = new PeopleResource(peopleService);
var thisPersonRequest = peopleResource.Get("people/me");
thisPersonRequest.PersonFields = "emailAddresses,phoneNumbers,names,nicknames,genders";
thisPerson = await thisPersonRequest.ExecuteAsync();
Где можно получить учетные данные пользователя с помощью IAuthorizationFlow.
Совет: поле через запятую удалит ваше пространство.
Чтобы получить день рождения, вы должны использовать дни рождения
peopleRequest.RequestMaskIncludeField = "person.emailAddresses,person.birthdays";
Если данные, которые вы ищете, отсутствуют, убедитесь, что пользователь заполнил Личные данные
Области применения
Убедитесь, что в вашем коде добавлены нужные области
пример
new[] { "profile", "https://www.googleapis.com/auth/contacts.readonly", "https://www.googleapis.com/auth/user.birthday.read", "https://www.googleapis.com/auth/userinfo.email" },
Попробуй это
Если вы запустите следующую форму, вы увидите, существуют ли данные или нет. Test me. Когда я запустил их, я смогу увидеть мой день рождения и мой адрес электронной почты.