Можно ли отправлять запросы на удаление / размещение в защищенный API Azure AD или получать токен jwt в виде строки, используя aadHttpClientFactory - PullRequest
1 голос
/ 31 октября 2019

У меня есть пользовательский интерфейс API, который я закрепил с помощью Azure AD, как в следующем учебном пособии: https://docs.microsoft.com/en-us/sharepoint/dev/spfx/use-aadhttpclient Отлично работает.

теперь у меня есть следующий код, чтобы сделать запрос GET к моему пользовательскому API(работает):

 this.context.aadHttpClientFactory
.getClient('MY_API_URL')
.then((client: AadHttpClient) => {
  console.log(AadHttpClient.configurations.v1); 

  return client
    .get(
      `MY_API_URL/SOME_ROUTE`,
      AadHttpClient.configurations.v1
    );
})
.then(response => {
  var res=  response.json();
  return res;
}).then( (res: any[]) => {
...

HERE I WOULD LIKE TO GET MY TOKEN

});

Так что это работает так, как я ожидаю. Но aadHttpClientFactory поддерживает только запросы GET и POST

Теперь моя идея состояла в том, чтобы просто сделать несколько запросов PUT / DELETE с помощью jQuery и использовать токен Bearer, который я получил выше (протестировано с почтальоном и его работой). Но потом я понял, что мне не так легко достать жетон. Когда я console.log (AadHttpClient.configurations.v1) я получаю только это: enter image description here

Конечно, я мог бы просто изменить свой API, чтобы использовать POST вместо PUT / DELETE, но этобыть довольно уродливым У кого-нибудь есть идея о том, как я могу получить токен в виде строки для выполнения пользовательских запросов с ним?

Ответы [ 2 ]

1 голос
/ 01 ноября 2019

AadHttpClient поддерживает метод fetch(url, configuration, options), где options может включать все параметры конфигурации запроса, поддерживаемые Fetch API .

Итак, чтобы сделать запрос DELETE, вы должны сделать что-то вроде:

client
    .get(
      `MY_API_URL/SOME_ROUTE`,
      AadHttpClient.configurations.v1,
      {
          method: 'DELETE'
      }
    );
0 голосов
/ 04 ноября 2019

Я решил это сейчас. Возможно, мой ответ кому-нибудь поможет позже. согласно ответу Филиппа Синьоре, это функция fetch (). Я должен был использовать его следующим образом:

        this.context.aadHttpClientFactory
        .getClient(api_url)
        .then((client: AadHttpClient) => {
          return client
            .fetch(
              MY_URL,
              AadHttpClient.configurations.v1,
              {
                method: METHOD, //put/DELETE etc.
                headers: [
                  ["Content-Type", "application/json"]
                ],

                body: JSON.stringify({
                  YOUR REQUEST BODY
                })
              }
            )
          });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...