Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Google请求同步返回403的操作_C#_Actions On Google - Fatal编程技术网

C# Google请求同步返回403的操作

C# Google请求同步返回403的操作,c#,actions-on-google,C#,Actions On Google,我正在谷歌智能家居设备上做一个动作 我正在使用一个具有“服务帐户令牌创建者”角色的服务帐户密钥,通过正式的NuGet包获取令牌 这是我必须为请求创建令牌的代码。报告状态调用和请求同步的代码相同 var oauth=global::Google.api.Auth.OAuth2.GoogleCredential.FromJson(jsonContent).createScope(“https://www.googleapis.com/auth/homegraph"); System.Diagnost

我正在谷歌智能家居设备上做一个动作

我正在使用一个具有“服务帐户令牌创建者”角色的服务帐户密钥,通过正式的NuGet包获取令牌

这是我必须为请求创建令牌的代码。报告状态调用和请求同步的代码相同

var oauth=global::Google.api.Auth.OAuth2.GoogleCredential.FromJson(jsonContent).createScope(“https://www.googleapis.com/auth/homegraph");
System.Diagnostics.Trace.WriteLine(“…等待令牌”);
string token=await oauth.underyingCredential.GetAccessTokenForRequestAsync();
对报表状态API的调用工作正常,我可以看到homegraph数据正在使用更新,但在尝试将其与请求同步API一起使用时,我得到403“调用方没有权限”

我确信我已经正确地遵循了中的说明,但我不知道为什么它没有按预期工作

我已经读到,如果实际的同步请求失败,RequestSync将以同样的方式失败-也就是说,403可能实际上来自我的实现端点,但是,如果是这种情况,我也应该在我的日志中看到该请求,因此它看起来好像没有生成同步请求

另外,我没有日志,但当我第一次设置它时,它实际上返回了一个成功响应。当时的问题是,尽管从homegraph获得了成功代码,但测试套件仍然失败

代码的其余部分如下所示

使用Google.api.Auth.OAuth2;
使用Google.api.HomeGraphService.v1;
使用Google.api.HomeGraphService.v1.Data;
var homeGraphServiceService=新的homeGraphServiceService();
var deviceresource=新设备资源(homeGraphServiceService);
var i=1;
foreach(var键入键)
{
System.Diagnostics.Trace.WriteLine(“…为“+keys.Length”中的“+i+”键生成请求);
i++;
var requestSync=DeviceResource.requestSync(
新请求SyncDeviceRequest
{
AgentUserId=key
});
requestSync.AccessToken=令牌;
尝试
{
System.Diagnostics.Trace.WriteLine(“…发送请求”);
var=wait requestSync.ExecuteAsync();
}
捕获物(GoogleApiException e)
{
System.Diagnostics.Trace.WriteLine(“…请求同步返回错误代码:”+e.HttpStatusCode+“\n”+e.Message+“\n\n”);
}
}

我还对我找到的一本书发表了评论,但我不确定我是否应该屏住呼吸。

你有没有尝试过使用C#和网络图书馆?@NickFelker没有,我不知道它的存在。我将研究如何实现它,但鉴于报告状态请求当前正在工作,我想即使我使用的是正式的NuGet包,我仍然会从请求同步中获得403。@NickFelker使用NuGet包,我也会遇到同样的问题;报告状态正常,但请求同步仍然无法与403同步。对于这里寻找答案的任何人,我没有设法解决此问题,我们最终放弃了该项目。您是否尝试使用C#和Dot Net库?@NickFelker不,我不知道它存在。我将研究如何实现它,但鉴于报告状态请求当前正在工作,我想即使我使用的是正式的NuGet包,我仍然会从请求同步中获得403。@NickFelker使用NuGet包,我也会遇到同样的问题;报告状态工作正常,但请求同步仍然无法与403同步。对于任何在这里寻找答案的人,我没有设法解决这个问题,我们最终放弃了该项目。