第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

ASP.NET - 模型對(duì)象列表的 API Url

ASP.NET - 模型對(duì)象列表的 API Url

C#
眼眸繁星 2023-09-24 16:06:21
目前我正在通過 jQuery 進(jìn)行 API 調(diào)用,我的問題是,是否可以在 C# 中執(zhí)行此調(diào)用,或者將 API 調(diào)用的結(jié)果轉(zhuǎn)換為 ASP.NET 模型對(duì)象列表?這是我的模型public class TeamStatsClass{        public int id { get; set; }        public string name { get; set; }        public string league { get; set; }        public string division { get; set; }}這是我當(dāng)前的 ajax 調(diào)用$.ajax({        url: "https://statsapi.web.nhl.com/api/v1/teams?sportId=1",        success: function (data) {            for (var team of data.teams) {                console.log(team.name);            }        }    });更新我將我的課程更改為如下所示:public class StatsTeamsClass    {        public IEnumerable<Teams> teams { get; set; }        public string copyright { get; set; }    }    public class Division    {        public int id { get; set; }        public string name { get; set; }        public string link { get; set; }    }    public class Teams    {        public int id { get; set; }        public string name { get; set; }        public string link { get; set; }        public League league { get; set; }        public Division division { get; set; }    }并創(chuàng)建了這個(gè)方法,它確實(shí)將結(jié)果放入模型對(duì)象中:public async System.Threading.Tasks.Task<StatsTeamsClass> GetTeams(){            HttpClient Http = new HttpClient();            var json = await Http.GetStringAsync("https://statsapi.web.nhl.com/api/v1/teams?sportId=1");            StatsTeamsClass teams = JsonConvert.DeserializeObject<StatsTeamsClass>(json);            return teams;}但是當(dāng)我嘗試在另一個(gè)控制器中調(diào)用這個(gè)方法時(shí),它只是掛在那里,沒有錯(cuò)誤,什么也沒有,我假設(shè)它會(huì)在一段時(shí)間后超時(shí)public class HomeController : Controller{        APIController webService = new APIController();        public ActionResult Index()        {            var item = webService.GetTeams().Result.teams;            return View();        }}(GetTeams() 位于控制器 APIController 內(nèi)部)那么 A. 在對(duì)象模型中獲取 API 結(jié)果然后調(diào)用這些結(jié)果的正確方法是什么?
查看完整描述

3 回答

?
小怪獸愛吃肉

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超1個(gè)贊

控制器操作也需要異步,以避免混合異步等待和阻塞調(diào)用,例如.Result.Wait()可能導(dǎo)致死鎖。


public class HomeController : Controller {? ??

? ? APIController webService = new APIController();


? ? public async Task<ActionResult> Index() {? ??

? ? ? ? var model = await webService.GetTeams();

? ? ? ? var teams = model.teams;

? ? ? ? return View();

? ? }

}

假設(shè)APIController是一個(gè)實(shí)際的ApiContoller


public class APIController : ApiController {


? ? //Your original code

? ? public async Task<StatsTeamsClass> GetTeams() {? ? ? ??

? ? ? ? HttpClient Http = new HttpClient();

? ? ? ? var json = await Http.GetStringAsync("https://statsapi.web.nhl.com/api/v1/teams?sportId=1");

? ? ? ? StatsTeamsClass teams = JsonConvert.DeserializeObject<StatsTeamsClass>(json);

? ? ? ? return teams;

? ? }


? ? //...

}

我建議不要APIController像這樣直接調(diào)用HomeController,而是將GetTeams()方法提取到可重用的服務(wù)中


public class WebService {

? ? static Lazy<HttpClient> http = new Lazy<HttpClient>();


? ? public async Task<T> GetAsync<T>(string url) {? ? ? ??

? ? ? ? var json = await http.Value.GetStringAsync(url);

? ? ? ? return JsonConvert.DeserializeObject<T>(json);

? ? }


? ? public Task<StatsTeamsClass> GetTeamsAsync() {? ? ? ??

? ? ? ? var url = "https://statsapi.web.nhl.com/api/v1/teams?sportId=1";

? ? ? ? return GetAsync<StatsTeamsClass>(url);

? ? }

}

參考您使用 HttpClient 錯(cuò)誤


可以正確地用于HomeController


public class HomeController : Controller {? ? ? ??

? ? public async Task<ActionResult> Index() {

? ? ? ? // Ideally web service should be injected but that topic

? ? ? ? // is outside of the scope of the question at the moment.

? ? ? ? var webService = new WebService();


? ? ? ? var model = await webService.GetTeamsAsync();

? ? ? ? var teams = model.teams;


? ? ? ? //...


? ? ? ? return View(teams);

? ? }

}

這里的假設(shè)是該項(xiàng)目是一個(gè)混合的 Asp.Net MVC 和 Web Api 2+


索引.cshtml


@model IEnumerable<Teams>

@{

? ? ViewBag.Title = "Teams";

}

@if(Model != null && Model.Count() > 0) {

? ? @foreach (var @team in Model) {

? ? ? ? <p>@team.name</p>

? ? }

}


查看完整回答
反對(duì) 回復(fù) 2023-09-24
?
慕容708150

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超4個(gè)贊

是的,C# 中的等效方法是使用HttpClient.?您最好創(chuàng)建一個(gè)類的靜態(tài)實(shí)例,以便為特定類型的重復(fù)調(diào)用重用:

private?static?readonly?HttpClient?Http?=?new?HttpClient();

然后通過async使用Newtonsoft.Json 的方法使用它,如下所示:

var?json?=?await?Http.GetStringAsync("https://statsapi.web.nhl.com/api/v1/teams?sportId=1");

然后,您可以將此 JSON 字符串解析為模型類,如下所示:

var?model?=?JsonConvert.DeserializeObject<TeamStatsClass>(json);


查看完整回答
反對(duì) 回復(fù) 2023-09-24
?
白衣染霜花

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超10個(gè)贊

只是想在此處添加更多點(diǎn)您獲得的 json 無法直接轉(zhuǎn)換為 TeamStatsClass 您可能必須引入另一個(gè)基類,因?yàn)閳F(tuán)隊(duì)是您獲得的 json 中的集合。


我將其發(fā)布在這里以獲得更清晰的視圖


? ? public class ResponseBaseClass

? ? {

? ? ? ? public IEnumerable<TeamStatsClass> teams { get; set; }

? ? ? ? public string copyright { get; set; }

? ? }

? ? public class TeamStatsClass

? ? {

? ? ? ? public int id { get; set; }

? ? ? ? public string name { get; set; }

? ? ? ? public Division division { get; set; }

? ? }

? ? public class Division

? ? {

? ? ? ? public int id { get; set; }

? ? ? ? public string name { get; set; }

? ? ? ? public string nameShort { get; set; }

? ? ? ? public string link { get; set; }


? ? }


?HttpClient Http = new HttpClient();

?var json = await Http.GetStringAsync("https://statsapi.web.nhl.com/api/v1/teams?sportId=1");

?var model = JsonConvert.DeserializeObject<ResponseBaseClass>(json);

?var yourTeamModelObj = model.teams;


查看完整回答
反對(duì) 回復(fù) 2023-09-24
  • 3 回答
  • 0 關(guān)注
  • 194 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)