Как мне go взять информацию из Списка и заполнить таблицу выбранной страной? Я могу получить доступ к названию каждой страны, чтобы заполнить раскрывающийся список и добавить альфа-код 3di git в качестве идентификатора, но я не знаю, как получить доступ к остальной информации, полученной из API. Я знаю, что это, вероятно, очень простое решение, но я не могу понять, насколько я понимаю. (РЕДАКТИРОВАТЬ: В представлении я думал об использовании события onclick для захвата идентификатора выбранной страны из списка для отображения информации, но я не уверен, как реализовать это в c#)
Я могу сделать вызов через API через контроллер:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using CountryViewer.Models;
using System.Net.Http;
using System.Net.Http.Headers;
using Newtonsoft.Json;
using Microsoft.CodeAnalysis;
using System.Diagnostics;
namespace CountryUI.Controllers
{
public class HomeController : Controller
{
string Baseurl = "https://restcountries.eu/rest/v2/all";
public async Task<ActionResult> Index()
{
List<CountryModel> country = new List<CountryModel>();
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(Baseurl);
client.DefaultRequestHeaders.Clear();
//Define request data format
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage Res = await client.GetAsync("https://restcountries.eu/rest/v2/all");
if (Res.IsSuccessStatusCode)
{
var CountryResponse = Res.Content.ReadAsStringAsync().Result;
country = JsonConvert.DeserializeObject<List<CountryModel>>(CountryResponse);
}
return View(country);
}
}
}
}
Затем я могу смоделировать эту информацию в виде списка
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace CountryViewer.Models
{
public class CountryModel
{
public CountryModel()
{
Currencies = new List<CurrencyModel>();
}
public CountryModel(string alpha3Code, string name, int population, string flag, string[] timeZones, string capital, List<CurrencyModel> currencies, string[] borders)
{
Alpha3Code = alpha3Code ?? throw new ArgumentNullException(nameof(alpha3Code));
Name = name ?? throw new ArgumentNullException(nameof(name));
Population = population;
Flag = flag ?? throw new ArgumentNullException(nameof(flag));
TimeZones = timeZones ?? throw new ArgumentNullException(nameof(timeZones));
Capital = capital ?? throw new ArgumentNullException(nameof(capital));
Currencies = currencies ?? throw new ArgumentNullException(nameof(currencies));
Borders = borders ?? throw new ArgumentNullException(nameof(borders));
}
//Alpha3code
public string Alpha3Code { get; set; }
//country name
public string Name { get; set; }
//population
public int Population { get; set; }
//public string Languages { get; set; }
//flag
public string Flag { get; set; }
//timezone
public string[] TimeZones { get; set; }
//capital
public string Capital { get; set; }
//currency
public List<CurrencyModel> Currencies { get; set; }
////bordering countries
public string[] Borders { get; set; }
}
public partial class CurrencyModel
{
public string Code { get; set; }
public string Name { get; set; }
public string Symbol { get; set; }
}
}
Затем я могу получить доступ к этой информации в просмотреть и отобразить список названий стран для выбора пользователем.
JSON выглядит следующим образом:
[
{
"name": "Afghanistan",
"topLevelDomain": [
".af"
],
"alpha2Code": "AF",
"alpha3Code": "AFG",
"callingCodes": [
"93"
],
"capital": "Kabul",
"altSpellings": [
"AF",
"Afġānistān"
],
"region": "Asia",
"subregion": "Southern Asia",
"population": 27657145,
"latlng": [
33.0,
65.0
],
"demonym": "Afghan",
"area": 652230.0,
"gini": 27.8,
"timezones": [
"UTC+04:30"
],
"borders": [
"IRN",
"PAK",
"TKM",
"UZB",
"TJK",
"CHN"
],
"nativeName": "افغانستان",
"numericCode": "004",
"currencies": [
{
"code": "AFN",
"name": "Afghan afghani",
"symbol": "؋"
}
],
"languages": [
{
"iso639_1": "ps",
"iso639_2": "pus",
"name": "Pashto",
"nativeName": "پښتو"
},
{
"iso639_1": "uz",
"iso639_2": "uzb",
"name": "Uzbek",
"nativeName": "Oʻzbek"
},
{
"iso639_1": "tk",
"iso639_2": "tuk",
"name": "Turkmen",
"nativeName": "Türkmen"
}
],
"translations": {
"de": "Afghanistan",
"es": "Afganistán",
"fr": "Afghanistan",
"ja": "アフガニスタン",
"it": "Afghanistan",
"br": "Afeganistão",
"pt": "Afeganistão",
"nl": "Afghanistan",
"hr": "Afganistan",
"fa": "افغانستان"
},
"flag": "https://restcountries.eu/data/afg.svg",
"regionalBlocs": [
{
"acronym": "SAARC",
"name": "South Asian Association for Regional Cooperation",
"otherAcronyms": [],
"otherNames": []
}
],
"cioc": "AFG"
},
{
"name": "Åland Islands",
"topLevelDomain": [
".ax"
],
"alpha2Code": "AX",
"alpha3Code": "ALA",
"callingCodes": [
"358"
],
"capital": "Mariehamn",
"altSpellings": [
"AX",
"Aaland",
"Aland",
"Ahvenanmaa"
],
"region": "Europe",
"subregion": "Northern Europe",
"population": 28875,
"latlng": [
60.116667,
19.9
],
"demonym": "Ålandish",
"area": 1580.0,
"gini": null,
"timezones": [
"UTC+02:00"
],
"borders": [],
"nativeName": "Åland",
"numericCode": "248",
"currencies": [
{
"code": "EUR",
"name": "Euro",
"symbol": "€"
}
],
"languages": [
{
"iso639_1": "sv",
"iso639_2": "swe",
"name": "Swedish",
"nativeName": "svenska"
}
],
"translations": {
"de": "Åland",
"es": "Alandia",
"fr": "Åland",
"ja": "オーランド諸島",
"it": "Isole Aland",
"br": "Ilhas de Aland",
"pt": "Ilhas de Aland",
"nl": "Ålandeilanden",
"hr": "Ålandski otoci",
"fa": "جزایر الند"
},
"flag": "https://restcountries.eu/data/ala.svg",
"regionalBlocs": [
{
"acronym": "EU",
"name": "European Union",
"otherAcronyms": [],
"otherNames": []
}
],
"cioc": ""
},
{
"name": "Albania",
"topLevelDomain": [
".al"
],
"alpha2Code": "AL",
"alpha3Code": "ALB",
"callingCodes": [
"355"
],
"capital": "Tirana",
"altSpellings": [
"AL",
"Shqipëri",
"Shqipëria",
"Shqipnia"
],
"region": "Europe",
"subregion": "Southern Europe",
"population": 2886026,
"latlng": [
41.0,
20.0
],
"demonym": "Albanian",
"area": 28748.0,
"gini": 34.5,
"timezones": [
"UTC+01:00"
],
"borders": [
"MNE",
"GRC",
"MKD",
"KOS"
],
"nativeName": "Shqipëria",
"numericCode": "008",
"currencies": [
{
"code": "ALL",
"name": "Albanian lek",
"symbol": "L"
}
],
"languages": [
{
"iso639_1": "sq",
"iso639_2": "sqi",
"name": "Albanian",
"nativeName": "Shqip"
}
],
"translations": {
"de": "Albanien",
"es": "Albania",
"fr": "Albanie",
"ja": "アルバニア",
"it": "Albania",
"br": "Albânia",
"pt": "Albânia",
"nl": "Albanië",
"hr": "Albanija",
"fa": "آلبانی"
},
"flag": "https://restcountries.eu/data/alb.svg",
"regionalBlocs": [
{
"acronym": "CEFTA",
"name": "Central European Free Trade Agreement",
"otherAcronyms": [],
"otherNames": []
}
],
"cioc": "ALB"
},
{
"name": "Algeria",
"topLevelDomain": [
".dz"
],
"alpha2Code": "DZ",
"alpha3Code": "DZA",
"callingCodes": [
"213"
],
"capital": "Algiers",
"altSpellings": [
"DZ",
"Dzayer",
"Algérie"
],
"region": "Africa",
"subregion": "Northern Africa",
"population": 40400000,
"latlng": [
28.0,
3.0
],
"demonym": "Algerian",
"area": 2381741.0,
"gini": 35.3,
"timezones": [
"UTC+01:00"
],
"borders": [
"TUN",
"LBY",
"NER",
"ESH",
"MRT",
"MLI",
"MAR"
],
"nativeName": "الجزائر",
"numericCode": "012",
"currencies": [
{
"code": "DZD",
"name": "Algerian dinar",
"symbol": "د.ج"
}
],
"languages": [
{
"iso639_1": "ar",
"iso639_2": "ara",
"name": "Arabic",
"nativeName": "العربية"
}
],
"translations": {
"de": "Algerien",
"es": "Argelia",
"fr": "Algérie",
"ja": "アルジェリア",
"it": "Algeria",
"br": "Argélia",
"pt": "Argélia",
"nl": "Algerije",
"hr": "Alžir",
"fa": "الجزایر"
},
"flag": "https://restcountries.eu/data/dza.svg",
"regionalBlocs": [
{
"acronym": "AU",
"name": "African Union",
"otherAcronyms": [],
"otherNames": [
"الاتحاد الأفريقي",
"Union africaine",
"União Africana",
"Unión Africana",
"Umoja wa Afrika"
]
},
{
"acronym": "AL",
"name": "Arab League",
"otherAcronyms": [],
"otherNames": [
"جامعة الدول العربية",
"Jāmiʻat ad-Duwal al-ʻArabīyah",
"League of Arab States"
]
}
],
"cioc": "ALG"
},
{
"name": "American Samoa",
"topLevelDomain": [
".as"
],
"alpha2Code": "AS",
"alpha3Code": "ASM",
"callingCodes": [
"1684"
],
"capital": "Pago Pago",
"altSpellings": [
"AS",
"Amerika Sāmoa",
"Amelika Sāmoa",
"Sāmoa Amelika"
],
"region": "Oceania",
"subregion": "Polynesia",
"population": 57100,
"latlng": [
-14.33333333,
-170.0
],
"demonym": "American Samoan",
"area": 199.0,
"gini": null,
"timezones": [
"UTC-11:00"
],
"borders": [],
"nativeName": "American Samoa",
"numericCode": "016",
"currencies": [
{
"code": "USD",
"name": "United State Dollar",
"symbol": "$"
}
],
"languages": [
{
"iso639_1": "en",
"iso639_2": "eng",
"name": "English",
"nativeName": "English"
},
{
"iso639_1": "sm",
"iso639_2": "smo",
"name": "Samoan",
"nativeName": "gagana fa'a Samoa"
}
],
"translations": {
"de": "Amerikanisch-Samoa",
"es": "Samoa Americana",
"fr": "Samoa américaines",
"ja": "アメリカ領サモア",
"it": "Samoa Americane",
"br": "Samoa Americana",
"pt": "Samoa Americana",
"nl": "Amerikaans Samoa",
"hr": "Američka Samoa",
"fa": "ساموآی آمریکا"
},
"flag": "https://restcountries.eu/data/asm.svg",
"regionalBlocs": [],
"cioc": "ASA"
},
{
"name": "Andorra",
"topLevelDomain": [
".ad"
],
"alpha2Code": "AD",
"alpha3Code": "AND",
"callingCodes": [
"376"
],
"capital": "Andorra la Vella",
"altSpellings": [
"AD",
"Principality of Andorra",
"Principat d'Andorra"
],
"region": "Europe",
"subregion": "Southern Europe",
"population": 78014,
"latlng": [
42.5,
1.5
],
"demonym": "Andorran",
"area": 468.0,
"gini": null,
"timezones": [
"UTC+01:00"
],
"borders": [
"FRA",
"ESP"
],
"nativeName": "Andorra",
"numericCode": "020",
"currencies": [
{
"code": "EUR",
"name": "Euro",
"symbol": "€"
}
],
"languages": [
{
"iso639_1": "ca",
"iso639_2": "cat",
"name": "Catalan",
"nativeName": "català"
}
],
"translations": {
"de": "Andorra",
"es": "Andorra",
"fr": "Andorre",
"ja": "アンドラ",
"it": "Andorra",
"br": "Andorra",
"pt": "Andorra",
"nl": "Andorra",
"hr": "Andora",
"fa": "آندورا"
},
"flag": "https://restcountries.eu/data/and.svg",
"regionalBlocs": [],
"cioc": "AND"
},
{
"name": "Angola",
"topLevelDomain": [
".ao"
],
"alpha2Code": "AO",
"alpha3Code": "AGO",
"callingCodes": [
"244"
],
"capital": "Luanda",
"altSpellings": [
"AO",
"República de Angola",
"ʁɛpublika de an'ɡɔla"
],
"region": "Africa",
"subregion": "Middle Africa",
"population": 25868000,
"latlng": [
-12.5,
18.5
],
"demonym": "Angolan",
"area": 1246700.0,
"gini": 58.6,
"timezones": [
"UTC+01:00"
],
"borders": [
"COG",
"COD",
"ZMB",
"NAM"
],
"nativeName": "Angola",
"numericCode": "024",
"currencies": [
{
"code": "AOA",
"name": "Angolan kwanza",
"symbol": "Kz"
}
],
"languages": [
{
"iso639_1": "pt",
"iso639_2": "por",
"name": "Portuguese",
"nativeName": "Português"
}
],
"translations": {
"de": "Angola",
"es": "Angola",
"fr": "Angola",
"ja": "アンゴラ",
"it": "Angola",
"br": "Angola",
"pt": "Angola",
"nl": "Angola",
"hr": "Angola",
"fa": "آنگولا"
},
"flag": "https://restcountries.eu/data/ago.svg",
"regionalBlocs": [
{
"acronym": "AU",
"name": "African Union",
"otherAcronyms": [],
"otherNames": [
"الاتحاد الأفريقي",
"Union africaine",
"União Africana",
"Unión Africana",
"Umoja wa Afrika"
]
}
],
"cioc": "ANG"
},
{
"name": "Anguilla",
"topLevelDomain": [
".ai"
],
"alpha2Code": "AI",
"alpha3Code": "AIA",
"callingCodes": [
"1264"
],
"capital": "The Valley",
"altSpellings": [
"AI"
],
"region": "Americas",
"subregion": "Caribbean",
"population": 13452,
"latlng": [
18.25,
-63.16666666
],
"demonym": "Anguillian",
"area": 91.0,
"gini": null,
"timezones": [
"UTC-04:00"
],
"borders": [],
"nativeName": "Anguilla",
"numericCode": "660",
"currencies": [
{
"code": "XCD",
"name": "East Caribbean dollar",
"symbol": "$"
}
],
"languages": [
{
"iso639_1": "en",
"iso639_2": "eng",
"name": "English",
"nativeName": "English"
}
],
"translations": {
"de": "Anguilla",
"es": "Anguilla",
"fr": "Anguilla",
"ja": "アンギラ",
"it": "Anguilla",
"br": "Anguila",
"pt": "Anguila",
"nl": "Anguilla",
"hr": "Angvila",
"fa": "آنگویلا"
},
"flag": "https://restcountries.eu/data/aia.svg",
"regionalBlocs": [],
"cioc": ""
},
{
"name": "Antarctica",
"topLevelDomain": [
".aq"
],
"alpha2Code": "AQ",
"alpha3Code": "ATA",
"callingCodes": [
"672"
],
"capital": "",
"altSpellings": [],
"region": "Polar",
"subregion": "",
"population": 1000,
"latlng": [
-74.65,
4.48
],
"demonym": "",
"area": 1.4E7,
"gini": null,
"timezones": [
"UTC-03:00",
"UTC+03:00",
"UTC+05:00",
"UTC+06:00",
"UTC+07:00",
"UTC+08:00",
"UTC+10:00",
"UTC+12:00"
],
"borders": [],
"nativeName": "Antarctica",
"numericCode": "010",
"currencies": [
{
"code": "AUD",
"name": "Australian dollar",
"symbol": "$"
},
{
"code": "GBP",
"name": "British pound",
"symbol": "£"
}
],
"languages": [
{
"iso639_1": "en",
"iso639_2": "eng",
"name": "English",
"nativeName": "English"
},
{
"iso639_1": "ru",
"iso639_2": "rus",
"name": "Russian",
"nativeName": "Русский"
}
],
"translations": {
"de": "Antarktika",
"es": "Antártida",
"fr": "Antarctique",
"ja": "南極大陸",
"it": "Antartide",
"br": "Antártida",
"pt": "Antárctida",
"nl": "Antarctica",
"hr": "Antarktika",
"fa": "جنوبگان"
},
"flag": "https://restcountries.eu/data/ata.svg",
"regionalBlocs": [],
"cioc": ""
},
{
"name": "Antigua and Barbuda",
"topLevelDomain": [
".ag"
],...]
Существует еще JSON, но вы получаете намекают.