我正在使用 HTTP dart包来进行类似的发布请求,但是有时当网络失败时,会从 IOClient 抛出 ClientException 上课,但是在catch区和应用程序崩溃时我什么都没得到。
http.post(url, headers: headers, body: body).then((response) {
//response parsing
}).catchError((error) {
//ClientException is never catched in this block.
});
答案 0 :(得分:0)
如package:http/src/io_client.dart
中所述:
任何内部HTTP错误都应包装为[ClientException]。
如docs中所述,这是以下情况的清楚案例:
潜在问题:意外混合同步和异步错误
要解决此问题,您需要将代码包装在Future.sync()中。
Future.sync()使您的代码对未捕获的异常具有弹性。如果您的函数中包含许多代码,则很可能您可能在做一些危险的事情而没有意识到:
return new Future.sync(() {
http.post(url, headers: headers, body: body).then((response) {});
});
Future.sync()不仅允许您处理可能会发生的错误,而且还可以防止错误意外泄漏出函数。
答案 1 :(得分:0)
在我的情况下,调用是使用 Microsoft Internet Information Services 作为后端的 https 地址,在 IIS 网站的 SSL 设置中,我错误地设置了“客户端证书:接受”而不是“客户端证书:忽略”,设置“忽略”解决了问题。