- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建一个可以管理 Google 日历并访问 Google People 的聊天机器人。我开发了代码,它可以完美地离线工作。当尝试在线上传所有内容时就会出现问题。
代码采用C#语言,在微软提供的模板之上开发。当您在 Azure 上加载代码时,LUIS 的功能可以正常工作,但当您调用 Google API 时就会出现问题。出现的错误如下:
System.AggregateException: One or more errors occurred. —> System.Net.HttpListenerException: Access is denied at System.Net.HttpListener.SetupV2Config() at System.Net.HttpListener.Start() at Google.Apis.Auth.OAuth2.LocalServerCodeReceiver.StartListener() at Google.Apis.Auth.OAuth2.LocalServerCodeReceiver.d__14.MoveNext() — End of stack trace from previous location where exception was thrown — at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Google.Apis.Auth.OAuth2.AuthorizationCodeInstalledApp.d__8.MoveNext() — End of stack trace from previous location where exception was thrown — at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Google.Apis.Auth.OAuth2.GoogleWebAuthorizationBroker.d__4.MoveNext() — End of stack trace from previous location where exception was thrown — at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Google.Apis.Auth.OAuth2.GoogleWebAuthorizationBroker.d__1.MoveNext() — End of inner exception stack trace — at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken) at Microsoft.Bot.Sample.LuisBot.Dialogs.LinkContact.ConnectPeople() at Microsoft.Bot.Sample.LuisBot.Dialogs.LinkContact.GetUserName() —> (Inner Exception #0) System.Net.HttpListenerException (0x80004005): Access is denied at System.Net.HttpListener.SetupV2Config() at System.Net.HttpListener.Start() at Google.Apis.Auth.OAuth2.LocalServerCodeReceiver.StartListener() at Google.Apis.Auth.OAuth2.LocalServerCodeReceiver.d__14.MoveNext() — End of stack trace from previous location where exception was thrown — at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Google.Apis.Auth.OAuth2.AuthorizationCodeInstalledApp.d__8.MoveNext() — End of stack trace from previous location where exception was thrown — at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Google.Apis.Auth.OAuth2.GoogleWebAuthorizationBroker.d__4.MoveNext() — End of stack trace from previous location where exception was thrown — at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Google.Apis.Auth.OAuth2.GoogleWebAuthorizationBroker.d__1.MoveNext()<—
在网上我发现了很多类似问题的案例,不幸的是,很少有人得到解答,而且在少数答案中,没有一个能解决问题。有人有什么想法吗?
我关注的最后一点之一链接到此报告 https://github.com/google/google-api-dotnet-client/issues/908 ,在某个时候它说:
"Sounds like its trying to launch the browser on the server and not on the users browser. It works on localhost because you have the power to launch a new browser session on your local pic. The problem comes when you try and deploy it and it trys to launch browser on the server rather in a new client browser. You should be following this authweb apps https://developers.google.com/api-client-library/dotnet/guide/aaa_oauth#web-applications-aspnet-mvc"
不知道是不是这个问题。我尝试点击该链接,但无法将这些说明与我的代码集成。
这是我的身份验证代码:
private static PeopleServiceService ConnectPeople()
{
// Create OAuth credential.
CancellationTokenSource tokenSource = new CancellationTokenSource();
CancellationToken token = tokenSource.Token;
IDataStore credentialPersistanceStore = new Dialogs.myDataStore();
Task<UserCredential> result = GoogleWebAuthorizationBroker.AuthorizeAsync(
new ClientSecrets
{
ClientId = "*id*",
ClientSecret = "*secret*"
},
new[] { "profile", "https://www.googleapis.com/auth/contacts.readonly" },
"me",token,
credentialPersistanceStore);
result.Wait();
UserCredential credential = result.Result;
// Create the service.
var service = new PeopleServiceService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = "*nome*",
});
return service;
}
然后我使用“服务”来使用 Google API。
我的工作经历如下: https://developers.google.com/google-apps/calendar/quickstart/dotnet和 https://dev.botframework.com/ .
谢谢大家
最佳答案
您正在关注的教程 .NET Quickstart设计用于与 .NET 控制台应用程序一起使用。它之所以有效,是因为它会生成 Web 浏览器以在本地计算机上进行身份验证。当您尝试将其部署到 Web 服务器时,它不会工作,因为您无法在 Web 服务器上生成浏览器,您需要在用户计算机上生成它。
您应该按照此进行身份验证 Web applications (ASP.NET MVC)
using System;
using System.Web.Mvc;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Auth.OAuth2.Flows;
using Google.Apis.Auth.OAuth2.Mvc;
using Google.Apis.Drive.v2;
using Google.Apis.Util.Store;
namespace Google.Apis.Sample.MVC4
{
public class AppFlowMetadata : FlowMetadata
{
private static readonly IAuthorizationCodeFlow flow =
new GoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer
{
ClientSecrets = new ClientSecrets
{
ClientId = "PUT_CLIENT_ID_HERE",
ClientSecret = "PUT_CLIENT_SECRET_HERE"
},
Scopes = new[] { DriveService.Scope.Drive },
DataStore = new FileDataStore("Drive.Api.Auth.Store")
});
public override string GetUserId(Controller controller)
{
// In this sample we use the session to store the user identifiers.
// That's not the best practice, because you should have a logic to identify
// a user. You might want to use "OpenID Connect".
// You can read more about the protocol in the following link:
// https://developers.google.com/accounts/docs/OAuth2Login.
var user = controller.Session["user"];
if (user == null)
{
user = Guid.NewGuid();
controller.Session["user"] = user;
}
return user.ToString();
}
public override IAuthorizationCodeFlow Flow
{
get { return flow; }
}
}
}
关于c# - 从 Azure 调用 Google API : "Access is denied",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48265391/
我在 Ubuntu Linux Server 20.04这是我第一次向 Docker 推送东西,所以我只是在本地创建了一个虚拟容器并且它工作了。按照一些在线教程,hello-world示例也可以正常工
尝试将图像推送到 Docker Hub 上的公共(public)存储库时会发生此错误。我尝试过的其他注册表没有问题。 我查看了很多网站、博客,包括 StackOverflow,但仍然没有明确的答案。
我有个问题。我有操作系统 CentOS 5.8 。我在 httpd.conf 文件中写了这个配置: Listen 85 并在文件末尾: ServerName localhost ServerAdmi
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 9 年前。 Improve
请帮我配置 python 服务器。当我使用 python 命令在 cmd 中执行 .pyw 文件时出现错误我收到错误: IOError: [Errno 13] Permission denied(Pe
我是第一次尝试 CGI 脚本,但没有成功。我已经阅读了很多教程并关注了不同论坛中的主题,但我无法使其正常工作。我在 Fedora 10 机器上使用 appache 网络服务器。我总是有问题 [Wed
在两个文件中使用相同的 mdb.connect 行。使用 debian 7,我的问题现在是向您提供更多详细信息,因为我在问题中使用了很多代码,但我没有什么可告诉的。文件 1 工作正常。 #!/usr/
我正在尝试将数据洞察报告连接到表格和 BigQuery 中的 View 。在 BigQuery 中,表从位于我的云端硬盘中的 GoogleSheet 接收数据, View 正在查询同一个表,但添加了一
我正在尝试为我的 docker hub 存储库创建一个 list ,以便我拥有一个多平台镜像。 我的程序如下: 我首先创建一个空的存储库并向其中推送两个图像,一个用于 amd64,另一个用于 arm6
我正在尝试在我的 arch linux lamp 服务器中使用 fuecms。但是我不能让 htaccess 工作。我的主文件夹是 ytsejam/fuel_cms/.. 这是我的 .htaccess
我有一个简单的docker-compose.yml文件以这种方式定义: version: '3' services: db: image: postgres:10.5-alpine
所以我使用了 testcafe 的默认 docker,它在 docker hub 上是 testcafe/testcafe,我必须运行一些 testcafe 脚本。 但是,我需要将错误触发的屏幕截图上
我在 ubuntu 上使用 Hyperledger Fabric 2.2。我正在尝试借助 article 使用 express.js 创建 REST API . 我的结构网络和 apiserver.j
最近将 macOS Mojave (10.14.4) 上的 Logstash(通过 Homebrew 安装)升级到版本 6.7.0,但事情没有按预期运行。当我尝试通过命令行手动运行它(出于本地开发目的
最近将 macOS Mojave (10.14.4) 上的 Logstash(通过 Homebrew 安装)升级到版本 6.7.0,但事情没有按预期运行。当我尝试通过命令行手动运行它(出于本地开发目的
我的想法是 eclipse-luna 。系统是windows 7旗舰版。我使用 spring security 将 *.jar 复制到我的项目并“添加到构建路径”。请查看有关警告的图片
我在 vmware 播放器上使用 ubuntu 16.04。共享文件夹已启用并且在/mnt/fghs 上可见。但是,所有者(root)不能被 chown 改变。如何改变它?请给我建议。 另外,有人说修
我刚开始学习 SQL 的基础知识,当我在搜索数据操作语言、数据控制语言、数据定义语言时,有些东西没有意义。 据我了解,Data Control Language 有 3 个关键词:Grant、Deny
我要迁移到新服务器,并希望在过渡期间将我的所有站点都脱机。我知道我可以将它放在我的根 .htaccess 文件中以阻止人们访问该站点: order deny,allow deny from all 但
我正在尝试使用 os.Mkdir() 创建一个目录,然后在其中创建文件,类似于这个脚本: package main import ( "log" "os" "path" ) f
我是一名优秀的程序员,十分优秀!