Google Drive API v3 C # Permissions.Update exception В теле ресурса есть поля, которые не доступны для прямой записи

В моем коде ниже, использующем Google Drive API v3 для передачи права собственности от одного пользователя другому в том же домене, возникает это исключение. Я использую служебную учетную запись с разрешениями на уровне домена для авторизации.

string FileID = "xxxxxxxxxxxxxxxxxxx";
var getRequest1 = OwnerDrive.Files.Get(FileID);
getRequest1.Fields = "owners,name,parents,mimeType,permissions";
var afile = getRequest1.Execute();

foreach (var perm in afile.Permissions)
            {
                Console.WriteLine(perm.EmailAddress + " : " + 
                 perm.DisplayName + " : " + perm.Role + " : " + perm.Id);
            }

// I manually note down the permissionID of the current owner as 
"14016095883385444520"

//Set New owner
Permission p = new Permission();
            p.Role = "owner";
            p.Type = "user";
            p.EmailAddress = "[email protected]";

            var updateRequest = OwnerDrive.Permissions.Update(p, FileID, 
            "14016095883385444520");
            updateRequest.TransferOwnership = true;
            updateRequest.Execute();

Возникновение ошибки \ исключения следующее:

«Сообщение [тело ресурса включает поля, которые не могут быть записаны напрямую.] Местоположение [-] Причина [fieldNotWritable] Домен [глобальный]».

В новом приводе v3 API говорится, что нужно использовать Permissions.Update и передать ему permissionID, что я и делаю (хотя и вручную). Что мне здесь не хватает? Любая помощь приветствуется.


person Nemo    schedule 20.02.2018    source источник
comment
Хотя похоже, что «Permissions.Create (p, FileID)» работает для передачи прав собственности в V3. Не уверен, что тогда будет использоваться для «Permissions.Update (p, FileID, pemrissionID)».   -  person Nemo    schedule 22.02.2018


Ответы (1)


Я думаю, вы попали в ошибку.

Я тестировал это с помощью Google Apis Explorer < / а>

PATCH https://www.googleapis.com/drive/v3/files/1f3eFRpZM-NAID42B9DPwUOKr6nvXuIxnfVvlQ8H1pNc/permissions/06030588225573437243?transferOwnership=true&key={YOUR_API_KEY}

{
 "emailAddress": "[email protected]"
}

Ответ:

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "required",
    "message": "The permission role field is required.",
    "locationType": "other",
    "location": "permission.role"
   }
  ],
  "code": 400,
  "message": "The permission role field is required."
 }
}

Вторая попытка запроса

PATCH https://www.googleapis.com/drive/v3/files/1f3eFRpZM-NAID42B9DPwUOKr6nvXuIxnfVvlQ8H1pNc/permissions/06030588225573437243?transferOwnership=true&key={YOUR_API_KEY}

{
 "emailAddress": "[email protected]",
 "role": "owner"
}

Ответ

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "fieldNotWritable",
    "message": "The resource body includes fields which are not directly writable."
   }
  ],
  "code": 403,
  "message": "The resource body includes fields which are not directly writable."
 }
}

Отчет об ошибке сделан здесь проблема 73634062

person DaImTo    schedule 21.02.2018
comment
Для v2 нет ошибки. В документации говорится: адрес электронной почты пользователя или группы, к которой относится это разрешение. Это поле только для вывода, которое присутствует, если тип разрешения - пользователь или группа. В версии 3 говорится, что поле доступно для записи. - person qtxo; 25.02.2018
comment
@qtxo OP использует v3, а не v2. - person DaImTo; 26.02.2018