【问题标题】:Google plus insert moment stopped working using google-api-dotnet-client谷歌加插入时刻停止使用 google-api-dotnet-client
【发布时间】:2013-05-02 04:17:30
【问题描述】:

问题是:有没有一种新方法可以调用 API,以便将活动插入到用户的个人资料中?

大约一个月前我发布了a related question here。它工作正常,直到本周早些时候它突然停止工作并抱怨这个错误:

[错误信息]

发送直接消息或获取响应时出错

[内部异常]

远程服务器返回错误:(400) Bad Request。

[堆栈跟踪]

在 DotNetOpenAuth.Messaging.StandardWebRequestHandler.GetResponse(HttpWebRequest 请求,DirectWebRequestOptions 选项)

在 DotNetOpenAuth.Messaging.StandardWebRequestHandler.GetResponse(HttpWebRequest 请求)

在 DotNetOpenAuth.Messaging.Channel.GetDirectResponse(HttpWebRequest 网络请求)

在 DotNetOpenAuth.Messaging.Channel.RequestCore(IDirectedProtocolMessage 请求)

在 DotNetOpenAuth.Messaging.Channel.Request(IDirectedProtocolMessage 请求消息)

在 DotNetOpenAuth.OAuth2.ClientBase.UpdateAuthorizationWithResponse(IAuthorizationState 授权状态,EndUserAuthorizationSuccessAuthCodeResponse 授权成功)

在 DotNetOpenAuth.OAuth2.WebServerClient.ProcessUserAuthorization(HttpRequestInfo 请求)

在 GPlusWrapper.PlusWrapper.GetAuthorization(WebServerClient 客户端) 中 \gplus_csharp_ssflow\PlusWrapper.cs:line 122

在 Google.Apis.Authentication.OAuth2.OAuth2Authenticator`1.LoadAccessToken()

在 Google.Apis.Authentication.OAuth2.OAuth2Authenticator1.ApplyAuthenticationToRequest(HttpWebRequest request)
at Google.Apis.Requests.Request.CreateWebRequest(Action
1 onRequestReady) 在 Google.Apis.Requests.Request.ExecuteRequestAsync(Action1 responseHandler) at Google.Apis.Requests.ServiceRequest1.GetAsyncResponse(Action1 responseHandler) at Google.Apis.Requests.ServiceRequest1.GetResponse() 在 Google.Apis.Requests.ServiceRequest`1.Fetch()

乍一看,熟悉 Google API 和 DNOA 的人会说这是 DNOA 问题。我已经搜索了三天,发现具有相同错误消息的问题不适合该问题 - 或者建议的解决方案不适合我遇到的问题。

所以接下来要做的是升级,是的,这是有道理的,因为 Google 团队可能已经改变了 API 的工作方式。于是我从v1.2.4737.25316升级到v1.3.0.15233,也就是最新稳定版in the repo

为了确保不是我的代码或我的代码中的某些东西导致了问题,我重新访问了Gus' sample code given here。该示例代码曾经在v1.2 中工作,但在v1.2v1.3 中也停止工作。

现在由于有新版本的库,只有重新访问the docs 并查看配置是否发生更改或如何调用 API 才有意义。调用 API 的方式似乎没有什么不同。

所以我做了上次调试应用程序时所做的事情。我都试过了

  • request_visible_actions;和
  • 请求可见操作

我仍然有 access_type 参数,但没有任何效果。

同样,我的问题是:有没有一种新的方法可以调用 API,以便将活动插入到用户的个人资料中?

请注意我使用的是服务器端流程

【问题讨论】:

    标签: .net google-api google-plus dotnetopenauth google-api-dotnet-client


    【解决方案1】:

    如果您有quickstart working,则可以调用 API 来编写应用活动。要对此进行测试,请在快速入门中找到以下代码行:

    ps = new PlusService(authenticator);
    

    此时,如果你已经授权成功,你就可以创建一个 moment 对象并将其写入 Google:

    Moment body = new Moment();
    body.Target = new ItemScope();
    body.Target.Url = “https://developers.google.com/+/web/snippet/examples/widget”;
    body.Type = “http://schemas.google.com/AddActivity”;
    ps.Moments.Insert(body, “me”, MomentsResource.Collection.Vault).Fetch();
    

    我刚刚测试了代码,它仍然可以工作,这意味着该库仍然能够进行 API 调用。乍一看,我想起了you had asked this before,这让我想知道它是否是特定于 SS 流程的东西。经过一点调试,我遇到了与您运行 SS 相同的问题,但是,客户端正在接收授权码 - 一个好兆头。即使我删除了注入 request_visible_actions 的技巧,客户端库也失败了——这是一个不好的迹象。

    使用 request_visible_actions 仍然是正确的,并且在后台,客户端库正在使用 OAuth V2 流,它不应该改变。

    最终更新:

    changed my example server-side demo 手动交换访问令牌/刷新令牌的授权码。请从 GitHub 再次获取它,看看是否有帮助,但这是一个快速而肮脏的临时修复。我将研究为什么客户端库在代码交换部分中断。

    附:我知道 v1.3 的更改,希望我能尽快花时间执行代码更新!我以为没人会注意到...

    【讨论】:

    • 嗨 Gus',我正要回复说我正在使用您提供的另一个示例项目,我们都在此问答中链接到该示例项目。幸好我注意到你更新了你的答案。我将获得更新后的示例代码,并让您知道结果。但是现在让我感谢您(非常感谢!)花时间研究问题并创建解决方案(即使它是临时的):)
    • 更新后的代码仍然出错:The remote server returned an error: (400) Bad Request. 异常类型现在是ProtocolError。没有其他东西可以描述错误,没有内部异常。错误在 ManualCodeExchanger 的第 75 行 ->WebResponse response = request.GetResponse()
    • 啊,nvm,我的错。我更改了项目使用的端口,以便可以在我的机器上运行它。我没有注意到您正在使用 RedirectUri 作为临时修复的一部分。我只需要改变它。现在一切正常。谢谢! @class 如果您对图书馆有更新,我可以订阅吗?如果您对此问题有更新?
    • Google+ 的官方更新将在他们的 GitHub 页面上:github.com/googleplus
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-23
    • 2018-09-04
    • 1970-01-01
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    • 2012-09-07
    相关资源
    最近更新 更多