Как получить файл с помощью resourcekey Google Drive API?

#c# #google-drive-api

Вопрос:

Я нашел здесь

 https://stackoverflow.com/questions/68777408/how-to-obtain-a-resourcekey-using-google-drive-api  

и

 https://developers.google.com/drive/api/v3/resource-keys  

Я действительно получил доступ к ресурсам папки/файла. Но как получить копию файла или папки с помощью resourcekey? Я использую код

 DriveService.Files.Get(id).Execute()  

Это обновление работы раньше. Но теперь не надо. Я ищу много сообщений, но не решаю. Извините, мой английский не очень хорош. Спасибо, что прочитали. Правка: Я использую C#.

Комментарии:

1. Можете ли вы предоставить более подробную информацию о том, что вы пытаетесь сделать? Это кажется неясным из поста.

2. @Kessy: До обновления системы безопасности Google Диска этот код работал в сервисе DriveService. Файлы. Получить(идентификатор).Выполнить() После обновления произошла ошибка для ссылки на общий ресурс resourcekey. Я пытаюсь это исправить.

Ответ №1:

Вам нужно добавить X-Goog-Drive-Resource-Keys заголовок в свой запрос. Самый простой способ сделать это в клиентских библиотеках-с помощью перехватчиков запросов. Это немного неуклюже, но на самом деле не сложно:

 public class HeaderExecuteInterceptor : IHttpExecuteInterceptor {  private readonly string header;  private readonly string value;   public HeaderExecuteInterceptor(string header, string value)  {  this.header = header;  this.value = value;  }   public Task InterceptAsync(  HttpRequestMessage request,  CancellationToken cancellationToken)  {  request.Headers.Add(header, value);  // The value doesn't matter; Task.CompletedTask is simpler where supported.  return Task.FromResult(true);  } }   // Where you make the request const string ResourceKeysHeader = "X-Goog-Drive-Resource-Keys"; var request = service.Files.Get(id); var interceptor = new HeaderExecuteInterceptor(ResourceKeysHeader, resourceKey); request.AddExecuteInterceptor(interceptor); var response = request.Execute();  

Комментарии:

1. Может быть, код для Net 5.0? Я использую 4.5.

2. @Afrendly: Я предлагаю вам обновить до поддерживаемой (Microsoft) версии .NET — если Task.CompletedTask проблема возникла, она была добавлена в .NET 4.6. В будущем, если что-то не сработает, гораздо полезнее будет сказать, с какой проблемой вы столкнулись (а также с версией фреймворка, особенно если вы используете старую, неподдерживаемую версию). Я изменил код для использования Task.FromResult(true) , который должен работать на .NET 4.5, хотя.

3. Это моя вина. Спасибо.

Ответ №2:

В качестве альтернативы, любой может использовать этот код.

 DriveService.HttpClient.DefaultRequestHeaders.Add("X-Goog-Drive-Resource-Keys", "ID/ResourceKey") DriveService.Files.Get(id).Execute()  

Требуется»/».