4

我有这个简单的飞镖片段:

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()

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

但是responseis null,所以statusCode这里无法访问。

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

4

2 回答 2

0

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

于 2018-03-16T13:01:49.387 回答
0

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

final response = await _http
  .post(url, headers: someHeader, body: someValue);
if (response.statusCode == 400) {
  //  manage bad request
}
于 2018-03-13T08:01:19.723 回答