Невозможно реализовать API в ASP. NET Core - PullRequest
0 голосов
/ 02 августа 2020

(Примечание: я новичок!) Я делаю ASP. NET Основной веб-сайт, и мне нужно показать список всех стран с их оценками за рекомендации по путешествиям в таблице. Я не могу отобразить данные с помощью API-интерфейса Travel Advisory. Каждая страна - это отдельный ключ и разные классы, когда я вставляю JSON в качестве классов.

Как я могу вызвать класс каждой страны (например, AU) и отобразить данные по стране, используя al oop? Проблема в том, что стран слишком много, поэтому я надеюсь использовать для этого al oop. Как вы можете видеть в приведенном ниже коде, я могу отображать только одну страну за раз, поскольку каждая страна относится к другому классу.

Мой TravelAdvisory метод действия контроллера:

public async Task<ActionResult> Index()
{
    string countryCode = "AU"; //I plan to have multiple country codes in a loop, 
//just haven't done so yet as I have issues showing the data for all country codes

    // Make Web API call to get a list of travel advisories
    HttpClient client = new HttpClient();
    client.BaseAddress = new Uri("https://www.travel-advisory.info");

    HttpResponseMessage response = await client.GetAsync("/api"); 

    if (countryCode != null)
    {
        response = await client.GetAsync("/api?countrycode=" + countryCode);
    }

    if (response.IsSuccessStatusCode)
    {
        string data = await response.Content.ReadAsStringAsync();
        Rootobject model = JsonConvert.DeserializeObject<Rootobject>(data);

        float score = model.data.AU.advisory.score; 
 //here, I can only get the score for one country since class names are different.

        List<float> dataList = new List<float>();
        dataList.Add(score);

        TempData["Score"] = Convert.ToString(score);

        return View();
    }
    else
    {
        return View(new List<Data>());
    }
}

TravelAdvisory классы моделей:

public class Rootobject
{
    public Api_Status api_status { get; set; }
    public Data data { get; set; }
}

public class Api_Status
{
    public Request request { get; set; }
    public Reply reply { get; set; }
}

public class Request
{
    public string item { get; set; }
}

public class Reply
{
    public string cache { get; set; }
    public int code { get; set; }
    public string status { get; set; }
    public string note { get; set; }
    public int count { get; set; }
}

public class Data
{
    public AD AD { get; set; }
    public AE AE { get; set; }
    public AF AF { get; set; }
    public AG AG { get; set; }
    public AI AI { get; set; }
    public AL AL { get; set; }
    public AM AM { get; set; }
    ...

Мой код:

1 Ответ

0 голосов
/ 02 августа 2020

Вам нужно добавить параметр в метод Index, подобный этому, и записать свой лог c соответственно.

public async Task<ActionResult> Index(string countryCode)
{

И вы можете использовать код в if и else, вы вы хотите получить записи для всех стран, если countryCode равно null или строка эмоций.

HttpResponseMessage response = null;

if (string.IsNullOrEmpty(countryCode))
{
    response = await client.GetAsync("/api);
}
else
{
    response = await client.GetAsync("/api?countrycode=" + countryCode);
}

Edit :

Вы можете использовать отражение, чтобы получить все properties и продолжайте дальше.

Data data = ...;
foreach (var prop in data.GetType().GetProperties())
{
    ...
}
...