【问题标题】:System.AggregateException When Trying To Access Web API In Xamarin尝试在 Xamarin 中访问 Web API 时出现 System.AggregateException
【发布时间】:2018-07-16 09:32:07
【问题描述】:

过去一天我一直在处理一个问题,当我尝试在 Xamarin 中测试我的 REST API 时,我似乎遇到了 System.AggregateException。

现在,我已尽力缩小问题范围。请记住,问题绝对不在于代码本身,因为当我在控制台应用程序中测试完全相同的代码时,它可以正常工作并返回我的数据。仅当我在 Xamarin 中发送请求时才会引发错误。

错误在下面的第 4 行用“response”变量抛出。

(我也尝试过等待和异步运行该方法。)

public void TestReadData()
{
    string content = "error";
    HttpResponseMessage response = client.GetAsync("api/merchants").Result;
    content = response.Content.ReadAsStringAsync().Result;
    Console.WriteLine(content);
}

【问题讨论】:

  • 这里有一些问题,您通过调用Result 来阻止。这也是它被包裹在 AggregateException 中的原因,您需要捕获它并打开它以查看发生了什么。此外,它在控制台应用程序中运行良好的原因是 Android 使用它自己的 Http 客户端实现,该实现不同于默认的 .net 实现
  • @JamieRees 感谢您的回复。我用 try/catch 包围它,发现异常的堆栈跟踪如下:
  • '在 System.Threading.Tasks.Task.ThrowIfExceptional (System.Boolean includeTaskCanceledExceptions) [0x00011] in :0 \n 在 System.Threading.Tasks.Task1[TResult].GetResultCore (System.Boolean waitCompletionNotification) [0x0002b] in <f32579baafc1404fa37ba3ec1abdc0bd>:0 \n at System.Threading.Tasks.Task1[TResult ].get_Result () [0x0000f] in :0 \n 在 Biziboards.Database.DatabaseManager.TestReadData () [0x00008] in D:\\Documents\\Biziboards\\Biziboards Xamarin App\\Biziboards\\'
  • 不太清楚从这里去哪里。
  • at Biziboards.Database.DatabaseManager.TestReadData 这似乎是异常发生的地方,你应该看看这个方法

标签: rest xamarin xamarin.forms xamarin.android


【解决方案1】:

好的,我发现 Xamarin 的 Http 命名空间实现不喜欢本地托管的网站。我购买了 Azure 订阅并将我的数据库和 Web 应用程序上传到 Azure,Xamarin 应用程序能够正常检索数据。

【讨论】:

    【解决方案2】:

    您需要像这样等待对 ReadAsync 的调用:

    stringResult = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
    

    【讨论】:

    • 我尝试过异步调用它,而且由于错误,代码在之前的行中断了。
    • 您还应该等待 get Async 方法。 var response = await client.GetAsync("api/merchants");
    • 我也试过这个,但没有成功。 ' public async void TestReadData() { try { string content = "error"; HttpResponseMessage 响应 = 等待 client.GetAsync("api/merchants");内容 = 等待响应.Content.ReadAsStringAsync(); Console.WriteLine(内容); }'
    • 这是一个糟糕的答案。 ConfigureAwait(false) 如何修复其他地方发生的异常...
    猜你喜欢
    • 1970-01-01
    • 2019-08-24
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    • 2019-11-09
    • 1970-01-01
    • 2020-12-27
    • 1970-01-01
    相关资源
    最近更新 更多