Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 利用webapi中的Dropbox_C#_Angularjs_Asp.net Web Api2_Dropbox Api - Fatal编程技术网

C# 利用webapi中的Dropbox

C# 利用webapi中的Dropbox,c#,angularjs,asp.net-web-api2,dropbox-api,C#,Angularjs,Asp.net Web Api2,Dropbox Api,不确定这是否真的是一个愚蠢的问题,但是否有可能在web API的范围内访问/利用Dropbox 考虑以下几点。我有一个用Angular编写的多租户前端应用程序。C#web API中的后端(多租户)。用户可以上传文档/文件。API将负责将文档上载到存储提供商。在这种情况下,它是Dropbox。问题是,我读到Dropbox不再支持用户名/密码身份验证。因此,当用户需要向调用应用程序提供同意时,使用OAuth。这只需要发生一次。由于单个租户中的多个用户可以使用在线存储,我很难通过web API了解这将

不确定这是否真的是一个愚蠢的问题,但是否有可能在web API的范围内访问/利用Dropbox

考虑以下几点。我有一个用Angular编写的多租户前端应用程序。C#web API中的后端(多租户)。用户可以上传文档/文件。API将负责将文档上载到存储提供商。在这种情况下,它是Dropbox。问题是,我读到Dropbox不再支持用户名/密码身份验证。因此,当用户需要向调用应用程序提供同意时,使用OAuth。这只需要发生一次。由于单个租户中的多个用户可以使用在线存储,我很难通过web API了解这将如何工作

有什么建议吗?
谢谢

是的,您可以在Web API中使用第三方API。我从未使用过Drop box API,但正如您所说,他们使用OAuth作为身份验证机制,我可以向您展示调用第三方API的代码,在本例中,它是(clarifai)。 我正在使用
HttpClient
您可以使用Dropbox.NET SDK。但是,如果您想坚持使用HTTP,那么文档中也有同样的内容

string token = "Oauth token received using some mechanism";    
string requestPath = string.Format("v1/tag");

HttpClient client = new HttpClient();
client.BaseAddress = new Uri("https://api.clarifai.com/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);

HttpResponseMessage response = await client.PostAsync(requestPath, content);
if (response.IsSuccessStatusCode)
{
    var resString = await response.Content.ReadAsStringAsync();
    // JSON Response
    JObject resJsonObject = JObject.Parse(resString);

}
现在,您需要对用户进行身份验证并获取令牌。是Dropbox示例,其中演示了如何重定向Dropbox网站上的用户以进行身份验证并获取临时oauth令牌

  • 查看
    Home
    Controller中的
    Connect
    操作方法和
    authsync
    操作方法

希望这对你有帮助。如果有任何疑问,请随时提问。

如果您使用的是dropbox.NET SDK,我将查看其中提供的示例。如果您查看他们的简单博客演示,您可以看到他们如何在数据库中为所有用户存储访问令牌,然后在上载文件时,他们在后端为正在执行操作的用户检索访问令牌,并使用该令牌来验证对dropbox的请求。如果这是您要查找的,我不确定,但也许这会帮你找到正确的方向…@comradburk非常感谢你的回复。所以我不能只存储一个访问令牌并对所有用户使用它?我只想为所有用户使用一个存储位置。事实上,root管理员用户设置了dropbox实例。站点上的所有其他用户不需要知道正在使用哪个存储提供程序,只需要更好地理解Auth的工作原理,以下是正确的。我在dropbox中创建了一个应用程序。当用户需要授予权限/身份验证时,我在我的网站中引用此应用的id和机密。用户授予应用程序管理文件和文件夹的权限。站点从OAuth回调接收令牌。我说的站点现在可以随时管理文件,而无需再次验证,对吗?谢谢@理查德贝利:你是对的。我建议您查看OAuth的相关文档,即您从DropBox获得的代币,它的有效期是多久。根据过期时间的不同,您可能需要实现刷新令牌,请阅读以下内容:API访问令牌是否过期?应用程序访问令牌实际上不会过期,但用户可以通过进入我的应用程序手动撤销令牌。对于具有应用文件夹访问权限的应用,如果用户删除应用文件夹,则应用的访问令牌将不再有效。您应该只处理一次授权,并为该用户将来的所有调用保存访问令牌。如果现有的访问令牌无效(在这种情况下,调用将返回401),您应该提示用户重新授权您的应用程序源:@RichardBailey您的路径正确。我希望上面的答案对你有帮助。