问题描述
我想用这些代码连接到我的 Web api 但是当调试器到达时
var response = await client.GetAsync(url);
跳过没有任何错误,
更新
意思是:
我设置了断点,当调试器到达该行之后,不捕捉下一行并退出该块并跳转到调用方方法
public class Constants
{
public const string BaseUrl = "https://localhost:44301/";
}
2:
public static class GeneralUrl
{
public static string ComapnyNameUrl()
{
return string.Format(Constants.BaseUrl);
}
}
3:更改为 3.1
public async static Task<List<CompanyName>> GetCompanyNamesAsync()
{
List<CompanyName> companyNameList = new List<CompanyName>();
string url = GeneralUrl.ComapnyNameUrl() + "api/CompanyName";
using (HttpClient client = new HttpClient())
{
var response = await client.GetAsync(url);
if (response.IsSuccessstatusCode)
{
string content =await response.Content.ReadAsstringAsync();
companyNameList = JsonConvert.DeserializeObject<List<CompanyName>>(content);
}
}
return companyNameList;
}
更新 2
3.1:
我把上面的代码改成这个,但问题存在 更新
public class CompanyNameService
{
private static HttpClient client = new HttpClient();
public async static Task<List<CompanyName>> GetCompanyNamesAsync()
{
List<CompanyName> companyNameList = new List<CompanyName>();
string url = GeneralUrl.ComapnyNameUrl() + "api/Companyname";
var response = await client.GetAsync(url);
if (response.IsSuccessstatusCode)
{
string content =await response.Content.ReadAsstringAsync();
companyNameList = JsonConvert.DeserializeObject<List<CompanyName>>(content);
}
return companyNameList;
}
}
我的 web api 中的 startup.cs 也是
services.AddControllers().AddJsonoptions(o =>
{
o.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.Preserve;
o.JsonSerializerOptions.MaxDepth = 0;
});
services.AddControllers().AddNewtonsoftJson(options =>
options.SerializerSettings.ReferenceLoopHandling =
Newtonsoft.Json.ReferenceLoopHandling.Ignore);
更新 2 结束
最后调用它们是=>
4:
protected override async void OnAppearing()
{
base.OnAppearing();
var companyName = await CompanyNameService.GetCompanyNamesAsync();
}
更新
在输出窗口的调试模式下,我收到此消息
02-10 13:04:21.568 I/Choreographer(790):跳过了 428 帧!应用程序可能在其主线程上做了太多工作。 02-10 13:04:21.642 I/Openglrenderer(790):戴维!持续时间=7213ms;标志= 0,IntendedVsync = 51372290598463,垂直同步= 51379423931511,OldestInputEvent = 9223372036854775807,NewestInputEvent = 0,HandleInputStart = 51379430268200,AnimationStart = 51379430347200,PerformTraversalsstart = 51379430673700,DrawStart = 51379441519600,SyncQueued = 51379446948700,SyncStart = 51379447122900,IssueDrawCommandsstart = 51379447270300,SwapBuffers = 51379483411800,FrameCompleted=51379504170100,DequeueBufferDuration=409000,QueueBufferDuration=612000,
更新 3:
当我尝试使用本地地址时,在超过 5 分钟后在输出窗口中收到一条消息“操作已取消”并使用相同的消息捕获异常>.
解决方法
试试这个:
protected async override void OnAppearing()
{
base.OnAppearing();
var companyName = await GetCompanyNamesAsync();
}
public async static Task<List<CompanyName>> GetCompanyNamesAsync()
{
List<CompanyName> companyNameList = new List<CompanyName>();
string url = GeneralUrl.ComapnyNameUrl() + "api/Companyname";
using (HttpClient client = new HttpClient())
{
var response = await client.GetStringAsync(url);
companyNameList = JsonConvert.DeserializeObject<List<CompanyName>>(response);
}
return companyNameList;
}