【发布时间】:2020-07-19 20:01:36
【问题描述】:
我一直在努力解决这个问题太久了。这是我第一次使用 C# 和 .NET,除了大约 15 年前涉足 C++ 之外,我没有任何编程经验。 REST API 和异步性对我来说是新概念。
我正在尝试在 .NET MVC 5 中创建一个记分板页面,该页面由一个简单的表组成,其中的行包含从 MySQL 数据库中检索到的值。
数据库表中的每一行代表一个独特的球员以及他的各种统计值。我创建了一个模型来代表每个玩家PlayerRow,并将List<PlayerRow> 传递给我的视图,在该视图中通过@foreach (PlayerRow playerrow in Model) 生成表格。
这是我目前的ActionResult PlayerList():
public class HomeController : Controller
{
public ActionResult PlayerList()
{
List<PlayerRow> PlayerRows = new List<PlayerRow>();
string constr = ConfigurationManager.AppSettings["MySQLConnStr"];
using (MySqlConnection con = new MySqlConnection(constr))
{
string query = "SELECT * FROM `rankme`";
using (MySqlCommand cmd = new MySqlCommand(query))
{
cmd.Connection = con;
con.Open();
using (MySqlDataReader rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
PlayerRows.Add(new PlayerRow
{
TableID = rdr["id"].ToString(),
LegacySteamID = rdr["steam"].ToString(),
Steam64 = ConvertToSteam64(rdr["steam"].ToString()),
Name = rdr["name"].ToString(),
IP = rdr["lastip"].ToString(),
Score = Convert.ToInt32(rdr["score"]),
etc etc...
});
}
}
con.Close();
}
}
return View(PlayerRows);
}
}
相关内容来自我的PlayerList.cshtml:
@foreach (PlayerRow playerrow in Model)
{
<tr>
<th scope="row" class="avatar" id="@playerrow.Steam64"><img src="~/Content/placeholder.png"</th>
<td><a href="http://steamcommunity.com/profiles/@playerrow.Steam64">@playerrow.Name</a></td>
<td>@playerrow.Score</td>
<td>@playerrow.Kills</td>
<td>@playerrow.Deaths</td>
<td>@playerrow.Assists</td>
etc etc...
</tr>
}
MySQL 连接工作得很好,并且表格按照我想要的方式显示。 (虽然还不够完善) Picture of my current table
接下来我想做的是将每个表格行中的占位符头像替换为通过 Steam API 检索到的玩家头像。每个玩家头像 url 都可以通过调用 https://api.steampowered.com/ISteamUser/GetPlayerSummaries/v2/?key=_API_KEY_&steamids=_STEAMID64_ 来从 Steam API 中获取,这会返回一个 json 响应:
{
"response":{
"players":[
{
"steamid":"EXAMPLE_STEAMID",
"communityvisibilitystate":3,
"profilestate":1,
"personaname":"EXAMPLE_NAME",
"commentpermission":1,
"profileurl":"EXAMPLE_STEAM_PROFILE_URL",
"avatar":"https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/EXAMPLE_AVATAR.jpg",
"avatarmedium":"https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/81/EXAMPLE_AVATAR_medium.jpg",
"avatarfull":"https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/EXAMPLE_AVATAR_full.jpg",
"lastlogoff":1586222967,
"personastate":0,
"realname":"EXAMPLE_REALNAME",
"primaryclanid":"103582",
"timecreated":1070200624,
"personastateflags":0,
"loccountrycode":"US"
}
]
所以我想这需要我使用HttpClient() 发出请求并等待响应。这就是我迷路的地方,因为我似乎无法等待异步方法之外的响应。也许使用 AJAX(我从未使用过)会更合适?
我可以创建一个异步方法来使用 Steam API 吗?应该何时以及从何处调用该方法?
【问题讨论】:
标签: c# ajax asp.net-mvc async-await steam-web-api