- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个我编写的 C# 库,它提供了一些辅助函数来访问 Google 云端硬盘。
服务构造函数调用 AuthorizeAsync
如下:
// get access token
var credential = GoogleWebAuthorizationBroker.AuthorizeAsync(secrets, Scopes, key, CancellationToken.None, storageService).Result;
我已经为此编写了单元测试,并且在从单元测试系统运行时测试有效。我还在 Windows 服务中使用过它,它再次运行良好。我知道这段代码有效。
我现在尝试在具有更多 DLL 和引用的旧应用程序中使用它,当我调用该方法时它只是挂起并且没有引发异常。
我强烈怀疑是某处的DLL冲突,但没有异常或编译错误,不可能知道要更改什么。
API 版本:
<package id="Google.Apis" version="1.8.2" targetFramework="net45" />
<package id="Google.Apis.Auth" version="1.8.2" targetFramework="net45" />
<package id="Google.Apis.Core" version="1.8.2" targetFramework="net45" />
<package id="Google.Apis.Drive.v2" version="1.8.1.1270" targetFramework="net45" />
相关库:
<package id="log4net" version="2.0.3" targetFramework="net45" />
<package id="Microsoft.Bcl" version="1.1.9" targetFramework="net45" />
<package id="Microsoft.Bcl.Async" version="1.0.168" targetFramework="net45" />
<package id="Microsoft.Bcl.Build" version="1.0.14" targetFramework="net45" />
<package id="Microsoft.Net.Http" version="2.2.22" targetFramework="net45" />
欢迎任何指点..
最佳答案
代码无法运行,因为应用托管在 IIS 上。 IIS 访问 %appdata% 文件夹内的文件夹时可能存在问题。 token 文件默认保存在 %appdata% 文件夹中。我尝试更改对该文件夹的权限。我添加了 Everyone,DefaultAppPool,I_USER,... 但没有成功。还有较新版本的 Google.Apis (1.8.2) 允许完整路径( new FileDataStore(fullPath,true) ) true 表示完整路径,但即使在那里也有错误。无法使用该构造函数,因为我总是出错。所以我决定我的应用程序应该使用 IIS Express(事实上我创建了一个带有授权代码的新项目)。转到解决方案属性并将您的应用程序设置为使用 IIS Express。
从https://console.developers.google.com获取cliendId(json文件) (选择 Web 应用程序)并为 javascript 来源设置 http://localhost:48372(或您的应用程序使用的任何端口),为重定向 URL 设置 http://localhost:48372/authorize.aspx。您还应该在互联网上找到如何使您的端口静态)。保存您的 clientId 文件。 (这一步你可能已经做过了)当您使用 IIS Express 时, AuthorizeAsync 方法应该没有问题。系统将提示您输入您的凭据并选择您的 youtube 帐户(如果您已经登录,则只需选择帐户)。当您授予您的应用程序权限时,您将被重定向到 authorize.aspx。您的 aspx 授权页面应该使用提供的 Client Secret 属性和 DataStore 属性创建新的 IAuthorization 流对象。使用 code= Request.Params["code"] 从 URL 读取代码并创建 UserCredential 对象。youtubeService 的 HttpClientInitializer 属性属于 UserCredential 类型。您应该使用的方法类似于 var usercredential= flow.SomeMethodWhichReceives("user",code,CancelletionToken.None)。之后,包含刷新 token 的文件会在您指定的 FileDataStore 文件夹中生成。当您拥有刷新 token 时,您可以做任何您想做的事情,因为刷新 token 应该永远有效(除非手动撤销)。有一种方法允许从 refreshtoken 获取用户凭证,例如 flow.getAccessTokenfromRefreshToken("user","your_refresh_token_string")因此,当您拥有刷新 token 并使用最后一种方法时,您将能够访问 google youtube api。您也有可能使用此方法将其他用户上传到您的 YouTube 帐户。如果您对用户在您帐户中放置的内容感到放心,您始终可以将他们上传的视频设为私有(private),并在验证时将其更改为公开。
google youtube api 中的某些方法需要 OAUTH2 身份验证(从客户端密码获取刷新 token -> 从刷新 token 获取访问 token ...),例如上传视频,但有些方法如 getvideos 不需要。您可以向 youtubeService 构造器提供 API key 而不是 UserCredential
编辑:还有一个问题我忘了提(对于那些认为这就是全部的人)。当您授予您的应用程序访问 google api 的权限时(就在您被重定向到 authorize.aspx 之前),您将收到错误 redirect_url mismatch,因为 url parametar redirect_url 中的某处与您在 ClientId 中提供的重定向 url 不匹配json,(端口不同,至少,出于某种原因)。更改此参数,使其与您在 clientId json 中提供的重定向 URL 相匹配。
关于c# - 从某些应用程序调用时,Google OAuth 方法 AuthorizeAsync 挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24289428/
SQLite、Content provider 和 Shared Preference 之间的所有已知区别。 但我想知道什么时候需要根据情况使用 SQLite 或 Content Provider 或
警告:我正在使用一个我无法完全控制的后端,所以我正在努力解决 Backbone 中的一些注意事项,这些注意事项可能在其他地方更好地解决......不幸的是,我别无选择,只能在这里处理它们! 所以,我的
我一整天都在挣扎。我的预输入搜索表达式与远程 json 数据完美配合。但是当我尝试使用相同的 json 数据作为预取数据时,建议为空。点击第一个标志后,我收到预定义消息“无法找到任何内容...”,结果
我正在制作一个模拟 NHL 选秀彩票的程序,其中屏幕右侧应该有一个 JTextField,并且在左侧绘制弹跳的选秀球。我创建了一个名为 Ball 的类,它实现了 Runnable,并在我的主 Draf
这个问题已经有答案了: How can I calculate a time span in Java and format the output? (18 个回答) 已关闭 9 年前。 这是我的代码
我有一个 ASP.NET Web API 应用程序在我的本地 IIS 实例上运行。 Web 应用程序配置有 CORS。我调用的 Web API 方法类似于: [POST("/API/{foo}/{ba
我将用户输入的时间和日期作为: DatePicker dp = (DatePicker) findViewById(R.id.datePicker); TimePicker tp = (TimePic
放宽“邻居”的标准是否足够,或者是否有其他标准行动可以采取? 最佳答案 如果所有相邻解决方案都是 Tabu,则听起来您的 Tabu 列表的大小太长或您的释放策略太严格。一个好的 Tabu 列表长度是
我正在阅读来自 cppreference 的代码示例: #include #include #include #include template void print_queue(T& q)
我快疯了,我试图理解工具提示的行为,但没有成功。 1. 第一个问题是当我尝试通过插件(按钮 1)在点击事件中使用它时 -> 如果您转到 Fiddle,您会在“内容”内看到该函数' 每次点击都会调用该属
我在功能组件中有以下代码: const [ folder, setFolder ] = useState([]); const folderData = useContext(FolderContex
我在使用预签名网址和 AFNetworking 3.0 从 S3 获取图像时遇到问题。我可以使用 NSMutableURLRequest 和 NSURLSession 获取图像,但是当我使用 AFHT
我正在使用 Oracle ojdbc 12 和 Java 8 处理 Oracle UCP 管理器的问题。当 UCP 池启动失败时,我希望关闭它创建的连接。 当池初始化期间遇到 ORA-02391:超过
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 9 年前。 Improve
引用这个plunker: https://plnkr.co/edit/GWsbdDWVvBYNMqyxzlLY?p=preview 我在 styles.css 文件和 src/app.ts 文件中指定
为什么我的条形这么细?我尝试将宽度设置为 1,它们变得非常厚。我不知道还能尝试什么。默认厚度为 0.8,这是应该的样子吗? import matplotlib.pyplot as plt import
当我编写时,查询按预期执行: SELECT id, day2.count - day1.count AS diff FROM day1 NATURAL JOIN day2; 但我真正想要的是右连接。当
我有以下时间数据: 0 08/01/16 13:07:46,335437 1 18/02/16 08:40:40,565575 2 14/01/16 22:2
一些背景知识 -我的 NodeJS 服务器在端口 3001 上运行,我的 React 应用程序在端口 3000 上运行。我在 React 应用程序 package.json 中设置了一个代理来代理对端
我面临着一个愚蠢的问题。我试图在我的 Angular 应用程序中延迟加载我的图像,我已经尝试过这个2: 但是他们都设置了 src attr 而不是 data-src,我在这里遗漏了什么吗?保留 d
我是一名优秀的程序员,十分优秀!