如何在 Angular Dart 中构建 HttpInterceptor 服务?

How to build an HttpInterceptor Service in Angular Dart?

我正在尝试将 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 class。是否必须扩展 HttpClient class 才能这样做?

我看过 this S.O question 但它可以追溯到 5 年前,在此期间做它的方式可能已经发生了很大变化。

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

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

我决定使用 Dart Http 库,使用 the recommended method :

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);
  }
}