所以我从Nuget(Google.Apis.Storage.v1,版本= 1.8.1.10)下载了用于云存储的.NET客户端,使用Developer Console创建了一个项目,生成了API密钥,启用了计费,创建了一个存储桶。 />
但是,当我尝试列出存储桶中的所有对象时,我收到此错误(需要登录)。任何想法为什么会这样?在控制台中启用了云存储及其JSON API。
以下是我的示例应用中的完整代码:https://gist.github.com/chester89/5d6a62633abab3969c32
答案 0 :(得分:5)
API密钥是一个简单的标记,表示"此调用与此项目相关联。"它对于管理配额很有用,但它不是秘密,也不会像任何特定用户那样对呼叫者进行身份验证。您的存储桶可能无法被匿名呼叫者浏览,并且您的电话是匿名的。
您可以通过授予匿名用户对您的存储分区的读取权限来解决此问题,但更好的办法是验证您的请求。您有多种选择可以执行此操作,具体取决于您是要使用自己的个人凭据进行呼叫,还是要使用与应用程序关联的服务帐户。完整说明在此处记录:https://developers.google.com/api-client-library/dotnet/guide/aaa_oauth
猜测您想要自己进行身份验证,并且您正在编写将在桌面上运行的应用程序,这是一个示例:
UserCredential credential;
using (var stream = new FileStream("client_secrets.json", FileMode.Open, FileAccess.Read))
{
credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
new[] { BooksService.Scope.Books },
"user", CancellationToken.None, new FileDataStore("Books.ListMyLibrary"));
}
// Create the service.
var service = new BooksService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = "Books API Sample",
});
答案 1 :(得分:0)
放Apikey,401错误永远不会到来。
var service = new DirectoryService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName ="Books API Sample",
ApiKey = "gjgggjggskkxkhgd"
});