【问题标题】:Handling non-Ok requests in dart处理飞镖中的非 OK 请求
【发布时间】:2018-03-12 21:46:53
【问题描述】:

我有这个简单的飞镖 sn-p:

import 'package:http/http.dart' as http;

Client _http = new BrowserClient();

final response = await _http
      .post(url, headers: someHeader, body: someValue);

当前请求的服务器,返回Bad Request 400 响应。由于某些原因,我希望能够获得状态码。但是一旦_http.post 被调用,我就会收到这个错误:

POST http://localhost/path 400 (Bad Request)

将块放入try/catch 并没有帮助,因为捕获的异常是ClientException,它没有关于状态码和响应体的信息(这在这里很重要)。如何在这里处理状态码而不抛出异常?

更新:

_http.post() 通话后我有这个 sn-p:

if (response.statusCode == 400) {
  //  manage bad request
}

但是responsenull,所以statusCode 在此处无法访问。

更新 2: 我在服务器上收到请求并可以在服务器上进行跟踪。正如我所提到的,服务器正在发送400 Bad Request 响应,并且工作正常。但是在 Dart 中获取响应会导致错误。

【问题讨论】:

  • 错误信息是什么意思? (XMLHttpRequest 错误?)。这可能表示创建请求时出错,而不是响应中的正常错误代码。
  • 这是一个ClientException 错误。没有有用的数据。

标签: dart angular-dart dart-http


【解决方案1】:

Response 对象有一个字段statusCode,您可以在其中获取响应的状态代码。 你可以这样做:

final response = await _http
  .post(url, headers: someHeader, body: someValue);
if (response.statusCode == 400) {
  //  manage bad request
}

【讨论】:

  • 但这在使用BrowserClient 时不起作用,对吧?如问题中所述:您没有收到响应,而是收到ClientException,响应中没有状态代码或消息->我也复制了。
  • @Michael 是对的。根本没有responseresponsenull 并且无法访问statusCode 这里
  • 如果你得到ClientException,还有另一个问题。你的服务器可以访问吗?
【解决方案2】:

我怀疑网址、标题或正文以某种方式无效。 (例如,标题中的无效字符)。该请求实际上并未发送到服务器,因此ClientException 被抛出而不是给您响应。

【讨论】:

  • 请参阅有问题的 UPDATE 2
  • 这听起来像一个错误。也许您可以在问题跟踪器上发布完整的详细信息? github.com/dart-lang/http/issues ClientException 的堆栈跟踪以及帖子和响应的完整详细信息可能是相关的。
猜你喜欢
  • 1970-01-01
  • 2020-12-25
  • 1970-01-01
  • 1970-01-01
  • 2013-08-09
  • 2020-04-21
  • 1970-01-01
  • 1970-01-01
  • 2022-11-10
相关资源
最近更新 更多