如何在 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);
}
}
我正在尝试将 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);
}
}