我的应用程序使用 Google Drive API 读取用户上传到其 Drive 存储区域的文件,并将文件和文件夹写入同一目录。用户使用自己的帐户/凭据登录。
我目前的理解是,在这种情况下我唯一可用的范围(访问级别)是“完全驱动器访问”。
这是正确的说法吗?
Dropbox 支持一个“Apps”文件夹,我可以在其中使用他们的 API 进行读/写,同时被限制在我自己的区域内。我很惊讶 Google 没有提供类似的东西,因为我的用户可能不想授予对整个 Drive 存储的读/写访问权限,而我需要访问的只是一个目录(以及其中的所有子目录,无论我是创建或用户创建)。
为了提供更多信息,我的应用程序是一个抽认卡应用程序。我希望用户至少能够上传包含应用程序读取数据的电子表格。但是如果我不需要完全访问他们的所有数据,用户就会喜欢它。
我正在寻找与使用Android应用访问Google云端硬盘相关的一些指导.
1)我需要能够读取我的应用程序之外的用户上传的文件.这是否意味着我需要全驱动访问?(如果应用程序可以创建一个文件夹,然后查看该文件夹中存在的用户上传的所有文件,那就太棒了,但我不认为这样做.)
2)如果我需要全驱动访问权限,似乎Googles"Drive API for Android"不支持此功能,我需要使用REST API.我认为这是真的.
3)我需要来自Google的Auth 2.0客户端ID.如果我使用其余的API,这是否意味着我需要使用"Web应用程序"ID?我想我需要这个,因为我想要一个"授权代码".我无法使用"Android"类型ID.
4)我目前正在使用Android的"Google登录"来处理登录并提供身份验证代码.然后我可以将它转换为令牌+刷新令牌,并保存这些,这样我可以在一小时后以某种方式获得新的令牌.是否需要手动处理刷新令牌?
它变得丑陋,但我认为,因为我需要(?)全驱动访问,所以这是程序.
谢谢你的指导.
编辑:该问题已被确定为重复.提供的链接为问题#2提供了答案,但没有解决其他问题.
我同意这个问题很混乱......
我有一个 .NET Core Web API 控制器来处理 POST 请求,该请求采用 JSON ApiUser 对象并返回 ApiUser 对象
[HttpPost]
public ApiUser Post([FromBody] ApiUser model) {
return new ApiUser();
}
Run Code Online (Sandbox Code Playgroud)
假设我想向客户端返回一条错误消息:“电子邮件已存在。” 我不知道如何最好地以简单的方式做到这一点。
我可以向 ApiUser (以及我通过 API 返回的所有其他类)添加一个“ErrorMsg”属性,但不确定这是否是正确的方法。
“Pre-Core”,我会抛出一个 HttpResponseException,这在 Core 中不受支持。这很好,因为它会创建一个带有“Message”的简单 JSON,然后我可以抓取它。(Goofy:我会使用状态 202 Accepted 作为向我的客户表明我们有“已知错误”的标志。)
throw new HttpResponseException(request.CreateErrorResponse(HttpStatusCode.Accepted, msg));
Run Code Online (Sandbox Code Playgroud)
(我想我更愿意在控制器内部处理这个问题,而不是“过滤器”或“中间件”。后两者的一个问题是,如果我添加剃刀页面,我认为我需要知道是否出现错误来自 API 调用或 UI Web 调用。)
更新#1
似乎我可以执行以下操作(返回ActionResult< T>)来模拟我之前使用 HttpResponseException 所做的操作。仍然不确定执行类似的操作或通过将 ErrorMsg 添加到 ApiUser 返回状态 200 是否会更好。
[HttpPost]
public async Task<ActionResult<ApiUser>> Post([FromBody] ApiUser model) {
...
if (emailExists) return StatusCode(400, "Email already exists.");
else …Run Code Online (Sandbox Code Playgroud)