【问题标题】:Handling HTTP status codes处理 HTTP 状态码
【发布时间】:2020-07-14 11:21:18
【问题描述】:

我想听听您对此的建议。 假设我想处理从 http 协议中的 POST 或 GET 方法获得的错误/状态代码,我尝试实现这样的东西:

class Login extends IRequest<Map<String, dynamic>> {
  Login(var email, var password) {
    var data = {'email': email, 'password': password};
    var url = API_PREFIX + LOGIN_ENDPOINT;
    var body = json.encode(data);
    var headers = {
      'Content-type': CONTENT_TYPE,
    };
  }

  Future<IResponse> login(var mail, var password) async {
    final response = await http.post(url, headers: headers, body: body);
    switch (response.statusCode) {
      case OK:
      case ACCEPTED:
        final responseJson = json.decode(response.body);
        String key = responseJson['login_key'];
        String experial = responseJson['experial'];
        var token = LoginToken(key, experial);
        return token;
      case NOT_FOUND:
        return ErrorResponse(response.statusCode.toString());
    }
  }
}

我是用异步的方式做请求,然后检查响应码,但是有很多情况可以选择,从200到500,这使得代码很乱很丑, 有什么简单的方法可以解决这个问题吗? 我虽然有关于 try / catch,但它在这种情况下可用吗? (我知道try catch是针对异常的,这里我只想要结果的状态码……)

【问题讨论】:

    标签: api http dart


    【解决方案1】:

    如果您看一下wiki,您会看到,这些代码被分成几组。 1xx 表示信息响应,2xx 成功等。 使用 switch 语句,您可以检查接收到的代码属于哪个组并继续或抛出错误。

    其他选项是添加拦截器,并在那里检查响应代码。

    【讨论】:

      猜你喜欢
      • 2022-06-21
      • 2019-09-18
      • 1970-01-01
      • 2018-02-16
      • 2019-08-26
      • 2012-09-25
      • 2015-08-24
      • 2021-03-15
      • 2011-09-01
      相关资源
      最近更新 更多