#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()
Требуется»/».