如何在 C# 中使用 Dropbox.Api v 2.0 客户端 nuget 库检索共享链接?

问题描述 投票:0回答:1

我已经处理这个问题几个小时了,我在 Dropbox 中有 .png 文件,我需要获取这些文件的原始链接,以便我可以在我的代码中使用它。如何在 C# 中检索我在 Dropbox 中的共享链接?我需要检索该链接,以便可以在我的视图中使用它来将其分配给图像的

src
参数。在我的控制器内,我使用
CreateSharedLinkWithSettingsArg
方法为文件创建共享链接,但之后如何获取这些链接?这是我的代码:

List<Dropbox.Api.Files.Metadata> list = new List<Dropbox.Api.Files.Metadata>();
   foreach (var item in list)
            {
                var path = new Dropbox.Api.Sharing.CreateSharedLinkWithSettingsArg(item.PathDisplay);
}

我使用过类似的东西并且效果很好,但是当共享链接已经存在时,此代码会引发异常,因为以下代码始终尝试创建共享链接,我已经共享了所有文件,我只需要获取共享链接我的代码中的链接,我该怎么做?:

var sharing = await client.Sharing.CreateSharedLinkWithSettingsAsync(path);
var src = sharing.Url;

我正在使用 Dropbox.Api v 2.0 和 C#

c# asp.net-mvc dropbox-api
1个回答
0
投票

用于获取现有链接的 C# 代码非常稀缺。即使是关于这个问题的评论中提到的链接现在也已经死了。这是我想出的。如果有的话,它会返回第一个共享链接。如果不存在,则返回“NA”。

 public static async Task<string> GetSharedLink(string folder, string fileName)
{
    string sharedLink = "NA";

    DropboxStuff stuff = new DropboxStuff();

    // Depending on your .Net version
    ServicePointManager.SecurityProtocol =
        SecurityProtocolType.Tls12 |
        SecurityProtocolType.Tls11 |
        SecurityProtocolType.Tls;

    using (var dbx = new Dropbox.Api.DropboxClient(stuff.RefreshToken, stuff.AppKey, stuff.AppSecret))
    {
        try
        {                    
            var link = await dbx.Sharing.ListSharedLinksAsync(folder + "/" + fileName);

            // Get the first shared link, if any.
            sharedLink = link.Links[0].Url;

            // Alternatively, get all links and add them to a List<string>
            //foreach (var item in link.Links.Where(i => i.IsFile))
            // {
            //    // linkList.Add(item.Url);
            // }
            // You will need to return a Task<List<string>> instead of a string
            // (or whatever object type you need to return).

        }
        catch (Exception ex)
        {
            // Log error
        }
    }

    return sharedLink;
}

DropboxStuff 只是我为保存 Dropbox 凭据而创建的一个类。这对我来说效果相当好。如果您有多个应用程序,我建议将对象传递到 GetSharedLink。这将使在不同的应用程序中使用相同的代码变得更加容易。如果您只有一个 Dropbox 应用,那么上面的代码就可以正常工作。

此外,相关文件只有一个链接。如果有多个链接,可以取消注释代码来循环SharedLinkMetadata并根据需要进行处理。

© www.soinside.com 2019 - 2024. All rights reserved.