我需要在自定义搜索引擎上进行CRUD。从documentation开始,它看起来非常简单。我不断收到401回复。
我使用Google.Apis.Oauth2.v2获取令牌:
String serviceAccountEmail = "blahblahblah@developer.gserviceaccount.com";
var certificate = new X509Certificate2(@"key.p12", "blah", X509KeyStorageFlags.Exportable);
var credential = new ServiceAccountCredential(
new ServiceAccountCredential.Initializer(serviceAccountEmail)
{
Scopes = new[] { "https://www.googleapis.com/auth/cse" }
}.FromCertificate(certificate));
bool result = credential.RequestAccessTokenAsync(CancellationToken.None).Result;
TokenResponse token = credential.Token;
然后我将令牌添加到以下请求中(授权:Bearer mytoken):
GET http://cse.google.com/api/<USER_ID>/cse/<CSE_ID>
有一些事情在我身上迸发。
虽然您可以将HTTP请求设置为网址http://cse.google.com/api/[USER_ID]/cse/[CSE_ID],但我们建议您使用 改为使用以下网址:
请注意,这两个网址完全相同。
在身份验证部分中,示例使用的是不推荐使用的ClientLogin。没有OAuth 2.0的样本。
在文档的示例中,它说:
每个自定义搜索引擎都由创建的唯一ID标识 将用户ID与自定义搜索引擎ID相结合,以a分隔 冒号,像这样:
011737558837375720776:mbfrjmyam1g在这种情况下,用户ID是 011737558837375720776,搜索引擎ID为mbfrjmyam。
你会注意到搜索引擎ID是2个字符,不到它应该是的样子。
我知道这是一个很长的问题,但我希望这会有助于下一个人看到这一点并考虑这些问题。
任何人都知道401s的原因吗?