我正在关注 Google 提供的Youtube API示例之一,但到目前为止还没有取得多大成功。
此特定API需要授权访问(OAuth 2.0),因此我必须从Google API控制台获取secrets
JSON文件,其中包含OAuth2
操作所需的信息。
我已将JSON文件导入到我的UWP项目中,但每当我尝试将流设置为它时,我偶然发现 System.NotSupportedException 。
using (var stream = new FileStream("ms-appx:///client_secrets.json", FileMode.Open, FileAccess.Read))
{
credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
// This OAuth 2.0 access scope allows for full read/write access to
// authenticated user's account.
new[] { YouTubeService.Scope.Youtube },
"user",
CancellationToken.None,
new FileDataStore(this.GetType().ToString())
);
}
我已将JSON文件的 BuildAction 设置为内容,将复制到输出目录设置为如果更新则复制但总是复制,但没有任何成功。
有什么想法吗?
Ps:文件位于包位置的根目录,因此为了简单起见,我使用了ms-appx
URI方案。
答案 0 :(得分:2)
我已将Json文件导入我的UWP项目
如果要从项目的根目录获取文件。您可以使用Package.Current.InstalledLocation.GetFileAsync
方法获取文件。然后,您可以获得如下文件流:
StorageFile file = await Package.Current.InstalledLocation.GetFileAsync("client_secrets.json");
using (var stream = await file.OpenStreamForReadAsync())
{
//TODO:
}
请注意,如果将此json文件放在项目目录中,则此文件是只读的。如果要读取和写入,可以将其复制到Application Data存储。例如:LocalFolder。
答案 1 :(得分:2)
您遇到异常的原因是您在经典ms-appx:///
API中使用了特定于UWP的URI System.IO.FileStream
,而该API无法理解。
您有两种方法可以访问该文件:
System.IO
强> 使用经典的System.IO
类型,您需要使用实际的文件系统路径来访问该文件:
var filePath = Path.Combine(
Package.Current.InstalledLocation.Path,
"client_secrets.json");
using (var stream = new FileStream(
filePath,
FileMode.Open, FileAccess.Read))
{
...
}
StorageFile
您可以使用特定于UWP的StorageFile
API并支持ms-appx:///
。您可以使用StorageFile.GetFileFromApplicationUriAsync
方法或{@ 1}} InstalledLocation
访问该文件,如@XavierXie所示。
StorageFolder
API的优势在于它是异步(非阻塞)和推荐的UWP,而StorageFile
更通用,实际上更高效。