如何用Microsoft.SharePoint.Client C#仅获取用户创建的列表(排除文档库)
嘿,这个问题我之前在开发SharePoint应用时也踩过坑,刚好有几个简便的方法可以帮你精准过滤出用户自定义的列表,排除系统生成项和文档库:
方法1:利用BaseTemplate模板ID过滤
SharePoint里不同类型的列表/库都对应唯一的模板ID,我们可以通过筛选特定ID锁定目标:
- 用户创建的基础自定义列表模板ID是
100 - 文档库的模板ID是
101(直接排除这个就能去掉所有文档库) - 系统自带的列表比如MicroFeed(ID
109)、讨论板(ID108)、通知列表(ID104)等都有专属ID
如果用REST API请求,直接在URL里加过滤条件:
GET _api/web/lists?$filter=BaseTemplate eq 100
要是需要包含用户创建的任务列表(ID106)、联系人列表(ID107)这类常用自定义类型,可扩展过滤条件:
GET _api/web/lists?$filter=BaseTemplate eq 100 or BaseTemplate eq 106 or BaseTemplate eq 107
方法2:结合IsSystemList属性双重过滤
有些系统列表的模板ID比较特殊,这时可以搭配IsSystemList属性——这个布尔值标记了列表是否为系统内置:
- 用户自定义列表的
IsSystemList为false - 大部分系统列表的
IsSystemList为true
注意:文档库的IsSystemList是false,所以需要同时排除模板ID101。用REST API的话就是:
GET _api/web/lists?$filter=IsSystemList eq false and BaseTemplate ne 101
如果用CSOM(C#)代码实现,示例如下:
using (var context = new ClientContext("your-site-url")) { var targetLists = context.Web.Lists; // 加载符合条件的列表:非系统列表 + 不是文档库 context.Load(targetLists, lists => lists.Where(list => !list.IsSystemList && list.BaseTemplate != 101)); context.ExecuteQuery(); // 遍历处理用户自定义列表 foreach (var list in targetLists) { Console.WriteLine($"列表名称:{list.Title}"); } }
小提示
如果遇到特殊的用户创建列表(比如自定义模板生成的),可以先通过GET _api/web/lists查看所有列表的BaseTemplate和IsSystemList值,再调整过滤条件,确保不会遗漏目标列表。
内容的提问来源于stack exchange,提问作者Stephen McCormick
相关产品推荐
相关产品推荐

