首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Flutter > Dio > Request Interceptor Handler:处理程序不拦截请求

Flutter > Dio > Request Interceptor Handler:处理程序不拦截请求
EN

Stack Overflow用户
提问于 2022-08-10 10:32:55
回答 1查看 856关注 0票数 0

我试图拦截将授权密钥放入头文件的请求。对于使用Api类所做的每个请求,我都要这样做。但出于某种原因,我得到了一个401错误。我检查了头,发现钥匙不见了。有人知道,我需要更改什么才能得到请求头中的键?

代码语言:javascript
运行
复制
Api api = Api();

class Api extends InterceptorsWrapper {

  static BaseOptions opts = BaseOptions(
    baseUrl: SERVER_IP,
    responseType: ResponseType.json,
    connectTimeout: 5000,
    receiveTimeout: 3000,
  );

  static final dio = Dio(opts);

  @override
  void onRequest(
      RequestOptions options, RequestInterceptorHandler handler) async {
    if (!options.headers.containsKey("Authorization")) {
      var token = secureStorage.getAccessToken();
      options.headers['authorization'] = 'Bearer $token';
    }
    handler.next(options);
    return super.onRequest(options, handler);
  }

  @override
  void onError(DioError err, ErrorInterceptorHandler handler) {
    print('ERROR[${err.response?.statusCode}] => PATH: ${err.requestOptions.path}');
    return super.onError(err, handler);
  }

  Future<Response?> get(String url) async {
    try {
      var response = await dio.get(url);
      return response;
    } on DioError catch (e) {
      return null;
    }
  }
...

在我的颤振应用程序中,我调用了这样的响应:

代码语言:javascript
运行
复制
api.get(url);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-10 11:28:50

请尝试下面的东西,如果你需要更多的许可,让我知道。

例如,您可以调用api方法。

代码语言:javascript
运行
复制
await apis.call("apiMethods", formData,'get').then((resData) async {});

//此处,如何添加自动化令牌

代码语言:javascript
运行
复制
dio.options.headers["Authorization"] = "Bearer $authToken";

api.dart拦截器方法

代码语言:javascript
运行
复制
    Apis() {
    //options
    dio.options
      ..baseUrl = env['apiUrl']
      ..validateStatus = (int? status) {
        return status! > 0; //this will always redirect to onResponse method
      }
      ..headers = {
        'Accept': 'application/json',
        'content-type': 'application/json',
      };
    //interceptors
    dio.interceptors.add(InterceptorsWrapper(
      onRequest: (options, handler) {
        printLog("::: Api Url : ${options.uri}");
        printLog("::: Api header : ${options.headers}");
        return handler.next(options);
      },
      onResponse: (response, handler) {
        return handler.next(response);
      },
      onError: (DioError e, handler) {
        printLog("::: Api error : $e");
        return handler.next(e);
      },
    ));
  }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73304720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档