【问题标题】:Using Google Drive .NET API with UWP App将 Google Drive .NET API 与 UWP 应用程序一起使用
【发布时间】:2016-09-27 21:05:32
【问题描述】:

我正在尝试在我的 UWP 应用程序中使用 Google Drive 作为存储位置。我从谷歌提供的quickstart 开始。我将代码复制到一个空白的 UWP 项目中,将一些输出代码(Console.Writeline 更改为 textbox.append 方法)并尝试构建它。构建失败并报错:

Cannot find type System.ComponentModel.ExpandableObjectConverter in module System.dll

我正在运行 Windows 10 和 VS 2015,并且我已经通过 NuGet 安装了 sdk。快速入门中的示例代码可以在控制台应用程序中使用。出现问题的是 UWP 应用程序。

对于 UWP 应用程序,我将快速入门代码放在按钮单击方法中。这是因为 API 实际上有一个用于 uwp 应用程序的异步方法,这与快速入门中给出的代码有点不同。

包括:

using System;
using System.Collections.Generic;
using System.IO;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Google.Apis.Auth.OAuth2; 
using Google.Apis.Drive.v3;
using Google.Apis.Drive.v3.Data;
using Google.Apis.Services;
using Google.Apis.Util.Store;
using System.Threading;

按钮方法:

private async void button_Click(object sender, RoutedEventArgs e)
        {
            UserCredential credential;

            using (var stream =
                new FileStream("client_secret.json", FileMode.Open, FileAccess.Read))
            {
                string credPath = ""; //System.Environment.GetFolderPath(
                                             //System.Environment.SpecialFolder.Personal);
                credPath = Path.Combine(credPath, ".credentials/drive-dotnet-quickstart.json");

                credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
                    new Uri("ms-appx:///Assets/client_secrets.json"),
                    Scopes,
                    "user",
                    CancellationToken.None);
                //Console.WriteLine("Credential file saved to: " + credPath);
            }

            // Create Drive API service.
            var service = new DriveService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName = ApplicationName,
            });

            // Define parameters of request.
            FilesResource.ListRequest listRequest = service.Files.List();
            listRequest.PageSize = 10;
            listRequest.Fields = "nextPageToken, files(id, name)";

            // List files.
            IList<Google.Apis.Drive.v3.Data.File> files = listRequest.Execute()
                .Files;
            textBox.Text += "Files:\n";
            if (files != null && files.Count > 0)
            {
                foreach (var file in files)
                {
                    textBox.Text += (file.Name + file.Id + "\n");
                }
            }
            else
            {
                textBox.Text += ("No files found.");
            }
        }

应用程序编译后测试代码将无法工作,因为它缺少加载客户端密码的代码。由于我无法测试代码,所以我只能提供这些。

还有另一个post 是半相关的,只是答案是它不起作用并且帖子已经死了 4 年。我还想创建一个专门标记谷歌团队的新帖子(就像快速入门所说的那样)。

我的具体问题是:是否有解决此问题的方法,或者我只是做错了?

【问题讨论】:

    标签: c# windows-runtime google-drive-api uwp


    【解决方案1】:

    我同意@Vincent 的观点,UWP 应用程序使用 COM 作为基础并从那里构建。并非所有 .Net API 都可以在 UWP 应用程序中使用,此 SDK 基于 .Net APIs,这就是为什么您的控制台应用程序正常,但您的 UWP 应用程序已关闭。对于它们之间的区别,这里有一个great answer 来解释这个问题。但是,

    “您将需要来自 Google 的 UWP SDK 来构建 UWP 应用程序。”

    我只是尝试搜索这个没有任何运气,但这里有一个建议,您可以使用 JavaScript 向 Drive API 发出请求。为此,您可以参考JavaScript Quickstart。然后你就可以把它变成一个Web托管的UWP应用,更多信息可以参考Convert your web application to a Universal Windows Platform (UWP) app

    另一个可能使工作更轻松的建议是使用Rest API 发送HTTP 请求,您也可以参考API Reference

    正如@Vincent 所说,最后的建议是,如果您可以访问SDK 代码,您也可以尝试将其适配为UWP。这意味着您需要修改此 SDK 的源代码。

    【讨论】:

    • 感谢您在@Vincent 的回答之上构建。我将尝试使用 Rest API 路线——我想,迟到总比不搞砸要好。感谢您抽出宝贵时间回答我的问题。
    • 我正在尝试实施,它可以按照链接工作,并且说明仅更改您的 client id 不要更改项目示例中的 redircturl 保持不变。 link 但问题是在访问令牌之后如何下载、上传、删除文件:(
    【解决方案2】:

    用于构建 Windows 应用商店/UWP 应用的 .Net 风格的功能少于完整的 .Net 框架。不幸的是,ExpandableObjectConverter 对象不适用于 UWP 应用程序。

    您将需要来自 Google 的 UWP SDK 来构建 UWP 应用程序。

    如果您可以访问 SDK 代码,也可以尝试将其适配为 UWP。

    【讨论】:

    • 我找不到 UWP SDK。感谢您帮助找到解决方案并确认我不是一个白痴:-P
    • 您不能使用 .net 标准 2.0 应用程序并在其中执行此代码吗?它有更多的 api 访问权限
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-08
    • 2011-09-04
    相关资源
    最近更新 更多