错误"无法检索此用户帐户的OneDriveForBusiness。"使用Graph API访问Microsoft OneNote时

时间:2017-07-22 19:03:53

标签: microsoft-graph

我发出以下REST GET请求: https://graph.microsoft.com/v1.0/me/onenote/notebooks

我收到以下回复:

{
    "error": {
        "code": "30108",
        "message": "The OneDriveForBusiness for this user account cannot be retrieved.",
        "innerError": {
            "request-id": "25926552-3157-483a-bbcd-41a7105cd531",
            "date": "2017-07-22T18:46:07"
        }
    }
}

我没有One Drive For Business帐户。我真的需要一个访问OneNote API吗?

感谢。

4 个答案:

答案 0 :(得分:1)

是。为了使用API​​(访问OneNote数据),您必须拥有OneDrive(无论是个人/消费者还是商业/ Office 365) - 因为OneNote云数据实际存储在OneDrive / SharePoint中。如果您有Office 365帐户,可以尝试转到https://portal.office.com,然后单击左侧" waffle"按钮,然后单击OneDrive,它将创建您自己的个人OneDrive for Business。

请查看https://developer.microsoft.com/en-us/graph/docs/api-reference/v1.0/resources/onenote了解详情。

此外,如果您只是尝试使用API​​,则可以使用Graph Explorer。它有一些您可以尝试的保存/示例查询。 (在“样本查询”下,单击“显示更多样本”并切换 OneNote 开关。)

希望这有帮助,

答案 1 :(得分:0)

这里我是如何通过切换到使用Microsoft帐户进行身份验证并使用经典的OneNote Rest API在Azure功能中解决的。

var request = require('request');

module.exports = function (context, req) {

    var microsoftAccountAccessToken = req.headers['x-ms-token-microsoftaccount-access-token'];

    context.log( "Microsoft Account Access Token: " + microsoftAccountAccessToken );

    request(
        {
            url: 'https://www.onenote.com/api/v1.0/me/notes/notebooks',
            method: "GET",
            headers: {
                'Authorization': 'Bearer ' + microsoftAccountAccessToken
            },
        },
        function( error, response, body )
        {
            if (!error && response.statusCode === 200) {
                context.log(body);

                context.res = {
                    body: body
                };

                context.done();
            }
            else {

                context.log("error: " + error)
                context.log("response.statusCode: " + response.statusCode)
                context.log("response.statusText: " + response.statusText)

                context.res = {
                    body: response.statusText
                };

                context.done();
            }
        }
    );
};

答案 2 :(得分:0)

https://docs.microsoft.com/en-us/graph/onenote-error-codes#30108

无法检索用户的个人OneDrive for Business。下表列出了一些可能的原因。

  1. 尚未设置用户的个人站点。用户应打开OneDrive for Business,并按照任何说明进行站点设置。如果失败,则应联系其Office 365租户管理员。
  2. 当前正在提供用户的个人站点。稍后尝试请求。
  3. 用户没有有效的OneDrive for Business许可证。用户应联系其Office 365租户管理员。
  4. 网络问题阻止了请求的成功发送。

答案 3 :(得分:0)

我尝试了很多方法,最后我使用了这里提到的方法:https://docs.microsoft.com/en-us/previous-versions/office/office-365-api/how-to/onenote-auth

身份验证服务器为login.live.com,以上页面提供了两种方法:代码和令牌。两者都可以使用。进行身份验证并获得令牌后,我可以使用该令牌调用Graph API。

代码方法更易于演示。首先,在浏览器中打开它:

https://login.live.com/oauth20_authorize.srf
  ?response_type=token
  &client_id={client_id}
  &redirect_uri={redirect_uri}
  &scope={scope}

然后,登录帐户后,它将回调。只需将access_token复制到回调URL中。做:

GET https://graph.microsoft.com/v1.0/me/onenote/pages
Accept: application/json
Authorization: Bearer {access_token}

可以检索页面而不会出现30108错误。这些是简单的测试步骤。我用Java实现,可以通过Microsoft的图形库(com.microsoft.graph:microsoft-graph:1.5。+)获取OneNote数据。如下:

IOnenotePageCollectionPage pages = graphClient.me().onenote().pages().buildRequest().get();

graphClient是IGraphServiceClient。但是我通过login.live.com实现了身份验证提供程序。