Есть ли способ получить первый и второй объект из ответа API и сравнить их в ядре ASP.Net MVC? - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь получить значение закрытия первого и второго объекта из моего ответа API и сравнить их, а затем отобразить строку в зависимости от сравнения на HTML-странице

(я удалил свой личныйключ API и заменил его на 'your_api_key') Ответ, который я получаю от API, выглядит следующим образом;

{"Response":"Success","Type":100,"Aggregated":false,"Data":[{"time":1548191280,"close":1.13,"high":1.13,"low":1.13,"open":1.13,"volumefrom":0,"volumeto":0},{"time":1548191340,"close":1.13,"high":1.13,"low":1.13,"open":1.13,"volumefrom":0,"volumeto":0}],"TimeTo":1548191340,"TimeFrom":1548191280,"FirstValueInArray":true,"ConversionType":{"type":"direct","conversionSymbol":""},"RateLimit":{},"HasWarning":false}

Я пытался использовать оператор if, но получаю ошибки, я считаю, что проблема заключается в том, как я пытаюсь получить доступ к списку

Валюты.cs

public class DatumEurUSD
{
    public double CLOSE { get; set; }
    public double HIGH { get; set; }
    public double LOW { get; set; }
    public double OPEN { get; set; }
    public string MOVEMENT { get; set; } 
}

public class RootObjectEurUSD
{
    public List<DatumEurUSD> Data { get; set; }

    public double OldUSD { get => Data.First().CLOSE; set => OldUSD = value; } // value of USD one minute ago
    public double NewUSD { get => Data.ElementAt(1).CLOSE; set => NewUSD = value; } // current value of USD


    if(OldUSD == NewUSD)
    {
    DatumEurUSD.Movement.set("NONE")
    }
    else if(OldUSD > NewUSD)
    {
    DatumEurUSD.Movement.set("DOWN")
    }
    else if(OldUSD < NewUSD)
    {
    DatumEurUSD.Movement.set("UP")
    } 

}

HomeController.cs

public async Task<ActionResult> Currencies()
    {
        var req = WebRequest.Create(@"https://min-api.cryptocompare.com/data/pricemulti?fsyms=EUR&tsyms=USD,JPY,GBP,CHF,CAD,AUD,NZD&api_key=your_api_key");

        var reqEurUSD = WebRequest.Create(@"https://min-api.cryptocompare.com/data/histominute?fsym=EUR&tsym=USD&limit=1&api_key=your_api_key");

        //var reqEurAVG = WebRequest.Create(@"");

        var r = await req.GetResponseAsync().ConfigureAwait(false);
        var rEurUSD = await reqEurUSD.GetResponseAsync().ConfigureAwait(false);
        //var rEurAVG = await reqEurAVG.GetResponseAsync().ConfigureAwait(false);

        var responseReader = new StreamReader(r.GetResponseStream());
        var responseData = new JsonTextReader(responseReader);

        var responseReaderEurUSD = new StreamReader(rEurUSD.GetResponseStream());
        var responseDataEurUSD = new JsonTextReader(responseReaderEurUSD);

        //var responseReaderEurAVG = new StreamReader(rEurAVG.GetResponseStream());
        //var responseDataEurAVG = new JsonTextReader(responseReaderEurAVG);

        var serializer = new JsonSerializer();

        var d = serializer.Deserialize<RootObjectEUR>(responseData);
        var dEurUSD = serializer.Deserialize<RootObjectEurUSD>(responseDataEurUSD);
        //var dEurAVG = serializer.Deserialize<RootObjectEurAVG>(responseDataEurUSD);

        dynamic mymodel = new ExpandoObject();
        mymodel.Eur = d.EUR;
        mymodel.EurUSD = dEurUSD.Data;

        return View(mymodel);
    }

Currencies.cshtml

@model dynamic
<h1>Most Common Currency Exchanges</h1>

<table border="1">
<th>Currency</th>
<th>Rate</th>
<th>Movement</th>
<th>Open</th>
<th>Close</th>
<th>Date</th>
<tr>
    <td>EUR/USD</td>
    <td>@Model.Eur.USD</td>
    <td>@Model.Data.MOVEMENT</td>
    <td></td>
    <td></td>
    <td>@DateTime.Now</td>
</tr>

В настоящее время я получаю сообщение об ошибке в моем операторе if для неверного токена ипеременные не существуют в текущем контексте.

Я бы хотел, чтобы @ Model.Data.MOVEMENT отображал правильную строку в соответствии с условием if.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...