2017-11-15 2 views
1

저는 C# 클라이언트 라이브러리를 사용하고 있습니다.microsoft-graph를 통해 공유에 업로드하기 전에 파일에 필드 정보를 추가하십시오.

파일을 업로드 할 때 해당 파일에 대한 필드 (SharePoint 열) 중 하나를 설정하려고합니다. 나는이

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); 

처럼 PutAsync<DriveItem>(filestream)에 대한 호출 후 반환되는 DriveItem.ListItem에서 FieldValueSet를 업데이트 시도했다 그러나 나는이 예외 얻을 :

ServiceException 필드 'ID가'인식되지 않습니다

위의 경우 API를 3 번 ​​호출해야하지만 한 번의 호출로 파일을 업로드 할 때 필드를 추가 할 수 없습니다. 요청에 따라

업데이트 정보 -

난 단지 1 필드를 설정하려고하면 다음 'ID는'여전히 JSON에 나타납니다. 여기에 실제 코드와 '청소'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); 

퍼스트 콜 :

PUT /v1.0/sites/xxxxxx.sharepoint.com,af844170-6c96-448b-bb75-b1144fa09f3c,d3904f65-6367-4071-9201-e96ea7c3c5d7/drives/b!cEGEr5Zsi0S7dbEUT6CfPGVPkNNnY3FAkgHpbqfDxdeiLjGMWnChSroudPhjGXRg/root:/TestImage.jpg:/content HTTP/1.1

enter image description here

두 번째 전화 :

GET /v1.0/sites/xxxxxx.sharepoint.com,af844170-6c96-448b-bb75-b1144fa09f3c,d3904f65-6367-4071-9201-e96ea7c3c5d7/drives/b!cEGEr5Zsi0S7dbEUT6CfPGVPkNNnY3FAkgHpbqfDxdeiLjGMWnChSroudPhjGXRg/items/01QX3GBJL3RSNVFPDYGBG2FKKARXI7TSBV/listItem HTTP/1.1

세 번째 호출 (응답 HTTP 400 Bad Request입니다) :

PATCH /v1.0/sites/xxxxx.sharepoint.com,af844170-6c96-448b-bb75-b1144fa09f3c,d3904f65-6367-4071-9201-e96ea7c3c5d7/drives/b!cEGEr5Zsi0S7dbEUT6CfPGVPkNNnY3FAkgHpbqfDxdeiLjGMWnChSroudPhjGXRg/items/01QX3GBJL3RSNVFPDYGBG2FKKARXI7TSBV/listItem HTTP/1.1

enter image description here

답변

0

당신이 기록을 업데이트하고, 당신은 전체 개체에 전달하지 않습니다. 대신 변경하려는 필드 만 전달하십시오.

전체 개체를 전달하면 몇 가지 읽기 전용 속성이 전달됩니다. Microsoft Graph는 사용자가 지정한 모든 값을 적용해야한다고 가정하고 해당 값 중 하나가 읽기 전용 속성을 대상으로하는 경우 실패합니다.

+0

시도해 보았습니다. 새 사전을 만든 다음 내 단일 필드를 추가했습니다. 그런 다음 사전을'ListItem.Fields.AdditionalData'로 설정합니다. 그러나 동일한 오류로 실패하고 Fiddler에서 JSON에 'id'필드가 추가되었는지 검사합니다. – OrdinaryOrange

+1

Fiddler를 사용하여 캡처 한 요청과 응답을 추가 할 수 있습니까? 요청을 생성 한 클라이언트 라이브러리 호출을 포함시킵니다. –

관련 문제