Microsoft graph api “错误”;无法检索此用户帐户的OneDriveForBusiness。”;使用Graph API访问Microsoft OneNote时

Microsoft graph api “错误”;无法检索此用户帐户的OneDriveForBusiness。”;使用Graph API访问Microsoft OneNote时,microsoft-graph-api,Microsoft Graph Api,我提出以下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": { "re

我提出以下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"
        }
    }
}
我没有一个单驱动器的商业帐户。我真的需要一个才能访问OneNote API吗


谢谢。

是的。为了使用API(访问OneNote数据),您必须拥有OneDrive(无论是个人/消费者还是企业/Office 365),因为OneNote云数据实际上存储在OneDrive/SharePoint中。如果您有Office 365帐户,您可以尝试转到,然后单击左侧的“华夫格”按钮,然后单击OneDrive,这将创建您自己的个人OneDrive for Business

有关更多详细信息,请查看

另外,如果您只是在尝试API,那么您可以使用它。它有一些保存/示例查询,您可以尝试。(在“示例查询”下,单击“显示更多示例”并切换OneNote开关)


希望这能有所帮助,

这里是我如何通过切换到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();
            }
        }
    );
};

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

  • 尚未设置用户的个人站点。用户应打开OneDrive for Business,并按照任何说明配置站点。如果失败,他们应联系其Office 365租户管理员
  • 当前正在设置用户的个人站点。请稍后重试该请求
  • 用户没有有效的OneDrive for Business license。用户应联系其Office 365租户管理员
  • 网络问题导致请求无法成功发送

  • 我尝试了很多方法,最后我使用了这里提到的方法:

    身份验证服务器是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}
    
    然后,在登录帐户后,它将回调。只需在回调URL中复制access_令牌。做:

    GET https://graph.microsoft.com/v1.0/me/onenote/pages
    Accept: application/json
    Authorization: Bearer {access_token}
    
    检索页面时不会出现30108错误。这些是简单的测试步骤。我用Java实现,可以通过Microsoft的图形库(com.Microsoft.Graph:MicrosoftGraph:1.5.+)获取OneNote数据。详情如下:

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

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

    谢谢您的提示。奇怪的是,我使用我的个人帐户,这有一个包含我笔记本的OneDrive。为了获取访问令牌,我使用了一个配置为“使用Azure Active Directory登录”的Azure函数。也许这不适用于个人帐户。当我使用我的个人帐户登录到图形浏览器并访问OneNote Rest API时,我只会得到“未知错误”。这就是你的问题所在。如果你想访问你的个人/消费者OneDrive,你需要使用你的Microsoft帐户(而不是Azure AD帐户)登录。我不知道Azure功能是否支持这一点(可能-我只是不知道)。要使用Microsoft帐户登录并调用Microsoft Graph,您需要使用v2授权和令牌端点获取访问令牌。有关详细信息,请参阅此主题:注册您的应用程序并代表用户获取访问令牌。