C# 在通过microsoft graph上载到sharepoint之前,将字段信息添加到文件中
我正在使用c#客户端库 上载文件时,我希望能够为该文件设置一个字段(SharePoint列)。 我尝试从调用C# 在通过microsoft graph上载到sharepoint之前,将字段信息添加到文件中,c#,sharepoint,microsoft-graph-api,C#,Sharepoint,Microsoft Graph Api,我正在使用c#客户端库 上载文件时,我希望能够为该文件设置一个字段(SharePoint列)。 我尝试从调用PutAsync(filestream)后返回的DriveItem.ListItem更新FieldValueSet,如下所示 var newfile = await gClient .Sites[mySIteId] .Drives[myDriveId] .Items[mySubFolderId] .ItemWithPath("newFile.txt")
PutAsync(filestream)
后返回的DriveItem.ListItem
更新FieldValueSet
,如下所示
var newfile = await gClient
.Sites[mySIteId]
.Drives[myDriveId]
.Items[mySubFolderId]
.ItemWithPath("newFile.txt")
.Content
.Request()
.PutAsync<DriveItem>(fs);
var li = await gClient
.Sites[mySIteId]
.Drives[myDriveId]
.Items[newifle.Id]
.ListItem
.Request()
.GetAsync();
li.Fields.AdditionalData.Add("Title", "My New File Title");
await gClient
.Sites[mySIteId]
.Drives[myDriveId]
.Items[newifle.Id]
.ListItem
.Request()
.UpdateAsync(li);
var newfile=wait gClient
.Sites[mySIteId]
.Drives[myDriveId]
.Items[mySubFolderId]
.ItemWithPath(“newFile.txt”)
.内容
.Request()
.PutAsync(fs);
var li=等待gClient
.Sites[mySIteId]
.Drives[myDriveId]
.Items[newifle.Id]
.ListItem
.Request()
.GetAsync();
li.Fields.AdditionalData.Add(“标题”,“我的新文件标题”);
等待gClient
.Sites[mySIteId]
.Drives[myDriveId]
.Items[newifle.Id]
.ListItem
.Request()
.UpdateAsync(李);
但我有一个例外:
无法识别ServiceException字段“id”
上面需要对API进行3次调用,但我也看不到在一次调用中上载文件时添加字段的方法
根据要求更新信息-
如果我尝试只设置1个字段,那么JSON中仍然会显示“id”。下面是实际的代码和“清理过的”JSON
var fs = new FileStream(@"c:\temp\TestImage.jpg", FileMode.Open);
var newfile = await gClient.Sites[SPSiteId]
.Drives[LibraryId]
.Root
.ItemWithPath("TestImage.jpg")
.Content
.Request()
.PutAsync<DriveItem>(fs);
var li = await gClient.Sites[SPSiteId]
.Drives[LibraryId]
.Items[newifle.Id]
.ListItem
.Request()
.GetAsync();
var d = new Dictionary<string, object>();
d.Add("Title", "This should be the title");
li.Fields.AdditionalData = d;
await gClient.Sites[SPSiteId]
.Drives[LibraryId]
.Items[newifle.Id]
.ListItem.Request()
.UpdateAsync(li);
var fs=newfilestream(@“c:\temp\TestImage.jpg”,FileMode.Open);
var newfile=await gClient.Sites[SPSiteId]
.驱动器[LibraryId]
.根
.ItemWithPath(“TestImage.jpg”)
.内容
.Request()
.PutAsync(fs);
var li=等待gClient.Sites[SPSiteId]
.驱动器[LibraryId]
.Items[newifle.Id]
.ListItem
.Request()
.GetAsync();
var d=新字典();
d、 添加(“标题”,“本应为标题”);
li.Fields.AdditionalData=d;
等待gClient.Sites[SPSiteId]
.驱动器[LibraryId]
.Items[newifle.Id]
.ListItem.Request()文件
.UpdateAsync(李);
第一个电话:
PUT/v1.0/sites/xxxxxx.sharepoint.com,af844170-6c96-448b-bb75-b1144fa09f3c,d3904f65-6367-4071-9201-e96ea7c3c5d7/drives/b!CEGER5ZSI0S7DBEUT6CFPGVPKNNNNY3FAKGHPBQFDXDEILJGMWNCHSROUDPHJGXRG/root:/TestImage.jpg:/content HTTP/1.1
第二个电话:
GET/v1.0/sites/xxxxxx.sharepoint.com,af844170-6c96-448b-bb75-b1144fa09f3c,d3904f65-6367-4071-9201-e96ea7c3c5d7/drives/b!CEGER5ZSI0S7DBEUT6CFPGVPKNNNNY3FAKGHPBQFDXDEILJGMWNCHSROUDPHJGXRG/items/01QX3GBJL3RSNVFPDYGBG2FBKK7TSBV/listItem HTTP/1.1
第三个调用(响应是HTTP 400错误请求):
PATCH/v1.0/sites/xxxxx.sharepoint.com,af844170-6c96-448b-bb75-b1144fa09f3c,d3904f65-6367-4071-9201-e96ea7c3c5d7/drives/b!CEGER5ZSI0S7DBEUT6CFPGVPKNNNNY3FAKGHPBQFDXDEILJGMWNCHSROUDPHJGXRG/items/01QX3GBJL3RSNVFPDYGBG2FBKK7TSBV/listItem HTTP/1.1
更新记录时,不会传入整个对象。相反,只传入要更改的字段:
var li=new ListItem();
li.Fields.AdditionalData.Add(“标题”,“我的新文件标题”);
等待gClient
.Sites[mySIteId]
.Drives[myDriveId]
.Items[newifle.Id]
.ListItem
.Request()
.UpdateAsync(李);
传入完整对象时,将传入多个只读属性。Microsoft Graph将假定您指定的任何值都应该应用,如果这些值中的任何一个以只读属性为目标,则会失败 更新记录时,不会传入整个对象。相反,只传入要更改的字段:
var li=new ListItem();
li.Fields.AdditionalData.Add(“标题”,“我的新文件标题”);
等待gClient
.Sites[mySIteId]
.Drives[myDriveId]
.Items[newifle.Id]
.ListItem
.Request()
.UpdateAsync(李);
传入完整对象时,将传入多个只读属性。Microsoft Graph将假定您指定的任何值都应该应用,如果这些值中的任何一个以只读属性为目标,则会失败 我试过了。创建了一个新词典,然后添加了我的单个字段。然后将字典设置为
ListItem.Fields.AdditionalData
,但它会失败,并出现相同的错误,如果我使用Fiddler检查它,JSON中会添加一个“id”字段。您可以添加使用Fiddler捕获的请求和响应吗?包括生成该请求的客户端库调用。已尝试。创建了一个新词典,然后添加了我的单个字段。然后将字典设置为ListItem.Fields.AdditionalData
,但它会失败,并出现相同的错误,如果我使用Fiddler检查它,JSON中会添加一个“id”字段。您可以添加使用Fiddler捕获的请求和响应吗?包括生成该请求的客户端库调用。