Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在通过microsoft graph上载到sharepoint之前,将字段信息添加到文件中_C#_Sharepoint_Microsoft Graph Api - Fatal编程技术网

C# 在通过microsoft graph上载到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")

我正在使用c#客户端库

上载文件时,我希望能够为该文件设置一个字段(SharePoint列)。 我尝试从调用
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捕获的请求和响应吗?包括生成该请求的客户端库调用。