ArgumentNullException:将文件上传到Google云端硬盘时,“baseUri”为空

时间:2014-09-25 14:17:08

标签: .net google-drive-api

我按照此处的教程将文件上传到Google云端硬盘:

https://developers.google.com/drive/web/quickstart/quickstart-cs

我为我的主帐户创建了一个Id和Secret,有了这些信息,我就可以上传到我的两个帐户中的任何一个(从%AppData%/ Google中删除身份验证令牌......)。

然而,客户给了我们他的谷歌帐户,所以我们可以尝试一切都适合他,它没有为他的帐户工作。我们可以通过网络界面上传和下载文件,没有任何问题,但它不能与我的应用程序一起使用。

我注意到的一个区别是我的客户的帐户没有谷歌电子邮件地址;它是name@myclient.com,因此我使用我的工作电子邮件地址创建了一个新的Google帐户,对其进行了测试,并且只需登录Google云端硬盘即可完美运行。

问题出现在最后几行:

FilesResource.InsertMediaUpload request = service.Files.Insert(body, stream, "text/plain");
request.Upload();

File file = request.ResponseBody;
Console.WriteLine("File id: " + file.Id);

此时,request.ResponseBody为null,因此,如果我只是运行代码,file.Id会抛出ArgumentNullException。如果我进入调试模式并检查环境,请求.Progress(来自基类的私有属性)将其Status字段设置为" Failed",并且Exception字段是ArgumentNullException,其中包含消息& #34;参数不能为空。参数名称:baseUri。"。

有什么可能出错的想法吗?

更新 创建服务对象的代码:

// Create the service.
var service = new DriveService(new BaseClientService.Initializer()
{
    HttpClientInitializer = credential,
    ApplicationName = "Drive API Sample",
});  

3 个答案:

答案 0 :(得分:1)

你有一个没有正确范围的OAuth令牌!

将范围设置为:

static string[] Scopes = { DriveService.Scope.Drive, DriveService.Scope.DriveFile };

在我的第一次尝试中,我只使用了Drive而不是DriveFile

答案 1 :(得分:0)

我遇到了同样的问题,最后我发现API未启用。 我在案件中回复原因,希望对你有帮助。

在我的情况下,我没有正确配置API设置。

报告问题时未正确配置API时抛出ArgumentNullException的原因。 https://code.google.com/p/google-api-dotnet-client/issues/detail?id=421

ResumableUpload.InitializeUpload 中的第一个请求出错,但未报告包含“未正确配置API”的错误消息。

答案 2 :(得分:0)

我通过以下步骤解决了完全相同的错误:

  1. 转到https://console.developers.google.com/(以及项目页面)
  2. - > API和身份验证 - >的API
  3. 点击" Drive API"
  4. 激活它
  5. 然后应该在选项卡" Activated APIs"而且这个错误消失了。