首页 > 解决方案 > 如何在 Angular Dart 中构建 HttpInterceptor 服务?

问题描述

我正在尝试将 Angular 2 应用程序的代码移植到 Angular Dart,以便我可以重用 Flutter 中的业务逻辑。我的应用程序使用 HttpInterceptors 进行错误处理和服务器授权。

在打字稿中,我会注入一个简单的服务:

@Injectable({
  providedIn: 'root'
})
export class InterceptorService implements HttpInterceptor {
  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    return;
  }
  constructor(private auth: AuthService) { }
   intercept(
     req: HttpRequest<any>,
     next: HttpHandler
   ): Observable<HttpEvent<any>> {}
}

但是 Dart API 似乎没有 HttpInterceptor 类。是否必须扩展 HttpClient 类才能这样做?

我看过这个 SO question,但它可以追溯到 5 年前,与此同时,这样做的方式可能已经发生了很大变化。

标签: dartangular-dart

解决方案


事实证明,有几种方法可以在 Angular Dart / Flutter 中实现这一点。

一些建立在 dart http 之上的第三方库为 Http 拦截提供了方便的方法(DIOHttp Interceptor)。但是,两者都在客户端级别处理拦截。

我决定使用 Dart Http 库,使用推荐的方法

class UserAgentClient extends http.BaseClient {
  final String userAgent;
  final http.Client _inner;

  UserAgentClient(this.userAgent, this._inner);

  Future<StreamedResponse> send(BaseRequest request) {
    request.headers['user-agent'] = userAgent;
    return _inner.send(request);
  }
}

推荐阅读