如何返回Mega API Mega API

时间:2018-05-17 14:50:58

标签: c# api file-upload

我是C#的新手,这是我第一次使用此API

我想从API获取Mega帐户信息。

我可以( TotalQuota UsedQuota AvailableQuota =“TotalQuota - UsedQuota”)代码打击(我可以将其转换为GB)。

MegaApiClient myMegaClient = new MegaApiClient();

public void megaAccLogIn(string megaAccUserName,string megaAccPassword)
{
    if (myMegaClient.IsLoggedIn == true)
    {
        return;
    }
    else
    {
        myMegaClient.Login(megaAccUserName, megaAccPassword);
    }
}

public struct AccountInfo : IAccountInformation
{
    public long TotalQuota { get; set; }
    public long UsedQuota { get; set; }
    public IEnumerable<IStorageMetrics> Metrics { get; set; }

    public long AvailableQuota;
}

public AccountInfo getfoldercount()
{
    AccountInfo myAccountInformation = new AccountInfo();

    megaAccLogIn(megaAccUserName, megaAccPassword);

    var myMegaClintGetAccInfo = myMegaClient.GetAccountInformation();

    //IEnumerable<IStorageMetrics> test = myMegaClintGetAccInfo.Metrics;




    myAccountInformation.TotalQuota = myMegaClintGetAccInfo.TotalQuota;
    myAccountInformation.UsedQuota = myMegaClintGetAccInfo.UsedQuota;
    myAccountInformation.AvailableQuota = myMegaClintGetAccInfo.TotalQuota - myMegaClintGetAccInfo.UsedQuota;
    myAccountInformation.Metrics = myMegaClintGetAccInfo.Metrics;

    return myAccountInformation;
}

这是运行方法的代码

private void button5_Click(object sender, EventArgs e)
{
    var myAccountInformation = getfoldercount();

    textBox1.Text = FormatBytes(myAccountInformation.TotalQuota) + "\r\n" + FormatBytes(myAccountInformation.UsedQuota) + "\r\n" + myAccountInformation.Metrics;

}

图片the error i got when i run "myAccountInformation.Metrics"

这是我寻找Pic

的数据

我得到了这个例外Trying the last foeach or the other way get this ex

指标”包含一些重要数据,我希望得到它,我无法实现代码以字符串形式接收它。

我想获得( FoldersCount FilesCount BytesUsed NodeId

我已经尝试过每次搜索样本而没有找到。

我从“ Github ”获得此信息,但我仍然不明白如何使用它以及 接口 是什么。我不需要在C#中学到一些关于发生了什么的小知识,所以我可以继续。

From This Page

如果有人帮助我,我将感激不尽。

1 个答案:

答案 0 :(得分:0)

根据您提供给MegaApiClient的链接,您未正确设置AccountInfo。我错了;此答案仅基于您提供的内容以及指向源MegaApiClient的链接,我认为该链接应与之匹配。

我会先写AccountInfo以匹配IAccountInformation界面,如下所示:

public struct AccountInfo : IAccountInformation
{
    public long TotalQuota { get; set; }
    public long UsedQuota { get; set; }
    public IEnumerable<IStorageMetrics> Metrics { get; set; }
}

我相信,改变这一点将会解决您所遇到的错误。在您的代码中,您确实Metricslong,而实际上它必须是IEnumerable<IStorageMetrics>。如果您需要进一步解释,请告诉我,我很乐意发布/解释更多。

由于您询问了有关Interface的见解,我将尝试简短而简短地解释它。

Interface基本上是object应该是什么的蓝图。它解释了object的功能。例如:在IAccountInformation接口(通过您提供的链接)中,它声明对象至少具有只读属性long TotalQouta。它还声明还有另外两个属性long UserQoutaIEnumerable<IStorageMetrics> Metrics

因此,如果您制作使用此object的{​​{1}},则必须实施这些功能以匹配Interface。您已经看到我为您Interface添加了Interface并准确实施了它。 (我确实在属性中添加了setter,因为你这样使用它们。)

从中获取的一些有趣的事情是多态性的使用。您现在可以通过直接类型或通过struct接口作为类型访问您的对象。这对于只知道你自己要编写的IAccountInformation而不是Interface(或````````)的方法很有用。

另一件有趣的事情是,Type IAccountInformation中是如何使用多态的。 Interface property表示从IEnumerable<IStoreMetrics> Metrics { get; }派生的任何Type也会包含从IAccountInformation派生的类型的枚举。

当我们查看IStorageMetrics时(通过您提供的链接),您将看到4个属性(NodeId,BytesUsed,FilesCount,FoldersCount)。

代码中的IStorageMetrics就像娱乐接收器,电视或计算机背面的端口。你有HDMI,RCA,光纤,USB等......如果你的接收器有RCA输出和光纤输出,你知道你可以插入RCA电缆或光纤电缆插入它,因为它接收器的接口。 RCA插孔是为了做一些特别的事情但接收器不知道你要插入它的是什么。它只知道必须匹配该接口。代码是一样的...我们不知道谁在使用Interface IAccountInformation,但我们知道它将具有Interface所说的设置,我们可以沟通通过这些。

好的,所以你已经更新了一些没问题的问题。我会留下我发布的内容,并在此处发布更多内容。

不要忘记IAccountInformationMetrics,这意味着它是IEnumerable<IStorageMetrics>类型的枚举。 (如果它有助于可视化它将IStorageMetrics视为Metrics的数组或列表。IStorageMetrics只是意味着可以枚举类型。

枚举以多种方式使用,但最常见的一种是循环,例如IEnumerable循环。仅举例来说,您可以从foreach获取信息。

Metrics

foreach (var storageMetric in myAccountInformation.Metrics) { var bytesUsed = storageMetric.BytesUsed; var filesCount = storageMetric.FilesCount; var foldersCount = storageMetric.FoldersCount; var nodeId = storageMetric.NodeId; // do what you want with the info here } 的另一种常见用法是使用IEnumerable,它使用System.Linq作为所有查询的核心。 你可以像之前那样使用linq,就像这样...

IEnumerable

因此,您可以使用以下内容编写文本:(如果您想要的值当然是BytesUsed的总和。)

 // The following will result in totalBytes being the sum of all Metrics
 var totalBytes = myAccountInformation.Metrics.Sum(storageMetric => storageMetric.BytesUsed);

这有意义吗?