microsoftgraph / microsoftgraph/msgraph-sdk-java

SDK returns site `name` inconsistently: sometimes same as `displayName` instead of correct value and sometimes the correct value

未关闭
#2,345 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

status:waiting-for-triage type:bug
主要语言
Java
星标
444
派生
154
平均合并
18 小时 28 分钟
30 天内合并 PR
4

描述

Describe the bug

Doing different site lists returns different values in the name field.

Doing a search limited to a smaller set of sites returns the correct / expected value in the name field.

Doing a list of all sites returns the displayName in the name field.

Expected behavior

The SDK should return values in the name field consistently.

How to reproduce
  1. Return sites using this code:
graphClient.sites().get()

The return value in the MSGraph API response is:

{
  "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#sites",
  "value": [
    {
      "createdDateTime": "2025-03-31T16:03:30Z",
      "id": "mytenant.sharepoint.com,d0536e25-0c9c-4a9c-b879-cefdc46dc82d,9f7ed8fa-4175-4a6c-80ae-2e19f19f5948",
      "name": "Test Site Many Names Site Info Name",
      "webUrl": "https://mytenant.sharepoint.com/sites/TestSiteManyNames",
      "displayName": "Test Site Many Names Site Info Name",
      "isPersonalSite": false,
      "siteCollection": {
        "hostname": "mytenant.sharepoint.com"
      },
      "root": {}
    },
    {
      "createdDateTime": "2025-02-23T17:46:07Z",
      "id": "mytenant.sharepoint.com,c65bebd0-1a50-4d31-8ef8-51d067f95ca8,00577abf-eccb-44ae-ba22-1542cc3249e3",
      "name": "Apps",
      "webUrl": "https://mytenant.sharepoint.com/sites/appcatalog",
      "displayName": "Apps",
      "isPersonalSite": false,
      "siteCollection": {
        "hostname": "mytenant.sharepoint.com"
      },
      "root": {}
    },
    {
      "createdDateTime": "2025-02-20T01:38:39Z",
      "id": "mytenant.sharepoint.com,09ed6654-3505-4561-a2e7-8d2776480abb,4d074863-0c38-46e8-b60a-156446947967",
      "name": "Team Site",
      "webUrl": "https://mytenant.sharepoint.com/sites/contentTypeHub",
      "displayName": "Team Site",
      "isPersonalSite": false,
      "siteCollection": {
        "hostname": "mytenant.sharepoint.com"
      },
      "root": {}
    },
    {
      "createdDateTime": "2025-02-20T01:38:32Z",
      "id": "mytenant.sharepoint.com,ff2ad436-8677-4cfb-91d6-67d7344474a0,9fda6e4f-a65f-4cc1-ba2b-3d11d30dccd7",
      "webUrl": "https://mytenant.sharepoint.com/search",
      "isPersonalSite": false,
      "siteCollection": {
        "hostname": "mytenant.sharepoint.com"
      },
      "root": {}
    },
    {
      "createdDateTime": "2025-02-20T01:37:56Z",
      "id": "mytenant-my.sharepoint.com,5a898f19-31d7-4f38-abd7-d7342535cb7d,6baab3c4-1e9a-4c52-bf5d-49f46471726d",
      "name": "My Name",
      "webUrl": "https://mytenant-my.sharepoint.com/personal/myid_mytenant_com",
      "displayName": "My Name",
      "isPersonalSite": true,
      "siteCollection": {
        "hostname": "mytenant-my.sharepoint.com"
      },
      "root": {}
    },
    {
      "createdDateTime": "2025-02-20T01:35:31Z",
      "id": "mytenant.sharepoint.com,e24ba8dd-ec64-4930-b9d3-6a4a542d4114,e69c54e0-3df2-4d80-a2f9-48f75cc5a825",
      "name": "All Company",
      "webUrl": "https://mytenant.sharepoint.com/sites/allcompany",
      "displayName": "All Company",
      "isPersonalSite": false,
      "siteCollection": {
        "hostname": "mytenant.sharepoint.com"
      },
      "root": {}
    },
    {
      "createdDateTime": "2025-02-20T01:32:07Z",
      "id": "mytenant.sharepoint.com,e3bb292d-6bce-419a-8f50-c98b996d3b34,965c6dcd-d66f-4f05-b23a-5274bd961199",
      "name": "Communication site",
      "webUrl": "https://mytenant.sharepoint.com/",
      "displayName": "Communication site",
      "isPersonalSite": false,
      "siteCollection": {
        "hostname": "mytenant.sharepoint.com"
      },
      "root": {}
    }
  ]
}
  1. Return just one of the above sites, example here is the one with "Many" in the display name (Kotlin):
graphClient.sites().get {
  it.queryParameters.search = "Many"
}

and the return value in the MSGraph API response is now:

{
  "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#sites",
  "value": [
    {
      "createdDateTime": "2025-03-31T16:03:30Z",
      "description": "Test Site Many Names Description",
      "id": "mytenant.sharepoint.com,d0536e25-0c9c-4a9c-b879-cefdc46dc82d,9f7ed8fa-4175-4a6c-80ae-2e19f19f5948",
      "lastModifiedDateTime": "2025-03-31T16:03:38Z",
      "name": "TestSiteManyNames",
      "webUrl": "https://mytenant.sharepoint.com/sites/TestSiteManyNames",
      "displayName": "Test Site Many Names Site Info Name",
      "root": {},
      "siteCollection": {
        "hostname": "mytenant.sharepoint.com"
      }
    }
  ]
}

Note the difference in the Name fields. The first response contains "name": "Test Site Many Names Site Info Name" while the second response contains "name": "TestSiteManyNames".

Note also that the second response does not contain isPersonalSite: false (even if isPersonalSite is requested explicitly via $select).

SDK Version

6.33.0

Latest version known to work for scenario above?

No response

Known Workarounds

Extract the last path segment from the webUrl field to get the name consistently, after filtering out the root site.

Debug output

No response

Configuration

No response

Other information

No response

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

调研方向

从 graphClient.sites().get() 入口点开始,比较 SDK 如何表示捕获到的两个 Microsoft Graph 响应,包括 name 和 isPersonalSite。使用报告中的列表和搜索响应来定义预期的一致性;完成的标准是 SDK 为两个字段提供稳定值,或明确记录 upstream 限制。

由索引模型根据 Issue 内容生成。

评估

技术栈
java, kotlin
领域
api, backend
Issue 类型
缺陷
难度
4/5
预计耗时
3-5 天
活跃度
停滞
描述清晰度
基本清楚
新手友好度
42/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。