многокомпонентный HTTP-запрос с Microsoft графа Javascript SDK - PullRequest
0 голосов
/ 03 июля 2018

Я пытаюсь использовать Microsoft Graph JavaScript SDK для создания страницы в OneNote с изображениями, для которых OneNote требуется многочастный запрос. Я создал объект FormData со всеми данными, которые я пытаюсь отправить.

Запрос выполняется, когда я отправляю его сам, следующим образом:

var xhr = new XMLHttpRequest();
xhr.open("POST", url, true);
xhr.setRequestHeader("Authorization", "Bearer" + token);
xhr.onreadystatechange = function() {
  //Call a function when the state changes
  if (xhr.readyState == XMLHttpRequest.DONE && xhr.status == 200) {
    // Request finished. Do processing here.
  } else {
    // handle case
  }
};
// dataToSend = FormData object containing data
// (as Blobs), including the page HTML in a
// "Presentation" part as specified
xhr.send(dataToSend);

Однако, поскольку я использую Graph SDK для выполнения всех своих других запросов, мне интересно, есть ли способ выполнить многочастный запрос также с помощью SDK. Пока что это то, что я пробовал:

this.client
  .api(pagesURL)
  .version("beta")
  .header("Content-Type", "text/html")
  .post(dataToSend);

Исследование запроса в Fiddler показывает, что тело запроса содержит [object, Object], а не данные, отформатированные как составной запрос. Будем весьма благодарны за любую помощь о том, как правильно вставить объект FormData в запрос с использованием SDK / руководства о том, возможно ли это!

Ответы [ 2 ]

0 голосов
/ 23 августа 2018

Обновите Microsoft-Graph-Client до последней версии и попробуйте что-то вроде этого.

    const HTMLPageContent = 
    `<!DOCTYPE html>
    <html>
        <head>
            <title>A page with rendered images</title>
        </head>
        <body>
            <p>Here is an image uploaded as <b>binary data</b>:</p>
            <img src="name:imageBlock1" alt="an image on the page" />
        </body>
    </html>`;

    let sectionId = "<Your_OneNote_Page_Section_Id>";
    let formData = new FormData();
    let htmlBlob = new Blob([HTMLPageContent], {
        type: "text/html"
    });
    formData.append("Presentation", htmlBlob);
    formData.append("imageBlock1", file);
    client
        .api(`/me/onenote/sections/${sectionId}/pages`)
        .post(formData)
        .then((json) => {
            console.log(json);
            return Promise.resolve();
        });
0 голосов
/ 03 июля 2018

Я считаю, что это то, что вы ищете:

this.client
  .api("https://graph.microsoft.com/beta/me/notes/sections/{Section ID}/pages")
  .header("Content-Type", "application/xhtml+xml")
  .header("boundary", "MyPartBoundary")
  .post(dataToSend);

Этот фрагмент был адаптирован из модульного теста, состоящего из нескольких частей, используемого самим SDK. Вы можете найти этот тест на https://github.com/microsoftgraph/msgraph-sdk-javascript/blob/dev/spec/types/OneNote.ts

...