async Task <T> Request <T>(string path, HttpMethod method, Dictionary <string, object> headers = null, object data = null, Dictionary <string, object> queryParams = null) { string url = await BuildUrl(path, queryParams); HttpRequestMessage request = new HttpRequestMessage { RequestUri = new Uri(url), Method = method, }; await FillHeaders(request.Headers, headers); string content = null; if (data != null) { content = JsonConvert.SerializeObject(data); StringContent requestContent = new StringContent(content); requestContent.Headers.ContentType = new MediaTypeHeaderValue("application/json"); request.Content = requestContent; } LCHttpUtils.PrintRequest(client, request, content); HttpResponseMessage response = await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead); request.Dispose(); string resultString = await response.Content.ReadAsStringAsync(); response.Dispose(); LCHttpUtils.PrintResponse(response, resultString); if (response.IsSuccessStatusCode) { T ret = JsonConvert.DeserializeObject <T>(resultString, LCJsonConverter.Default); return(ret); } throw HandleErrorResponse(response.StatusCode, resultString); }
async Task <LCAppServer> FetchAppServer() { // 判断节点地区 if (!IsInternalApp(appId)) { // 国内节点必须配置自定义域名 throw new Exception("Please init with your server url."); } // 向 App Router 请求地址 if (appServer == null || !appServer.IsValid) { try { HttpRequestMessage request = new HttpRequestMessage { RequestUri = new Uri($"https://app-router.com/2/route?appId={appId}"), Method = HttpMethod.Get }; HttpClient client = new HttpClient(); LCHttpUtils.PrintRequest(client, request); HttpResponseMessage response = await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead); request.Dispose(); string resultString = await response.Content.ReadAsStringAsync(); response.Dispose(); LCHttpUtils.PrintResponse(response, resultString); Dictionary <string, object> data = JsonConvert.DeserializeObject <Dictionary <string, object> >(resultString); appServer = new LCAppServer(data); } catch (Exception e) { LCLogger.Error(e); // 拉取服务地址失败后,使用国际节点的默认服务地址 appServer = LCAppServer.GetInternalFallbackAppServer(appId); } } return(appServer); }