使用GraphServiceClient创建SharePoint列表时遭遇编译错误与运行时无效请求问题
嘿,我正好碰到过类似的坑,来给你捋捋怎么解决!
首先说编译错误的事儿:你参考的代码里写的List = new ListInfo之所以报错,是因为当前你用的Microsoft Graph SDK版本里,Microsoft.Graph.Models.List这个类根本没有名为List的属性——大概率是文档没跟上SDK的更新节奏。Quickfix给的ListProp虽然能让编译器闭嘴,但这又会引发新的问题。
为啥用ListProp运行时会报无效请求呢?因为Graph API的创建列表接口期望接收的是名为list的字段,但SDK会把ListProp这个属性序列化成listProp,API根本识别不了这个字段,自然就返回无效请求了;而你删掉这个字段的话,API因为没收到必填的列表模板信息,同样会报错。
那正确的写法得看你用的SDK版本:
如果你用的是Graph SDK v5及以上,直接把代码里的List = new ListInfo改成ListInfo = new ListInfo就行,这个属性名在SDK里会被正确序列化成API需要的list字段。修改后的完整代码大概是这样:
// Dependencies using Microsoft.Graph.Models; var requestBody = new List { DisplayName = "Books", Columns = new List<ColumnDefinition> { new ColumnDefinition { Name = "Author", Text = new TextColumn(), }, new ColumnDefinition { Name = "PageCount", Number = new NumberColumn(), }, }, ListInfo = new ListInfo { Template = "genericList", }, }; var result = await graphClient.Sites["{site-id}"].Lists.PostAsync(requestBody);
要是你还在使用Graph SDK v4,更推荐直接升级到v5版本——毕竟新版本的命名更直观,也能避开这种属性名不匹配的坑;要是暂时没法升级,可以试试手动指定属性的序列化名称,确保SDK能输出API识别的list字段。
我自己之前就是因为没注意SDK版本差,踩了一模一样的坑,改完属性名之后就正常运行了,你可以试试!
备注:内容来源于stack exchange,提问作者Roest
相关产品推荐
相关产品推荐

