dart - 如何在 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 年前,与此同时,这样做的方式可能已经发生了很大变化。
解决方案
事实证明,有几种方法可以在 Angular Dart / Flutter 中实现这一点。
一些建立在 dart http 之上的第三方库为 Http 拦截提供了方便的方法(DIO,Http 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);
}
}
推荐阅读
- python - Tensorflow 中复杂参数的反向传播
- react-native - 如何在本机反应中动态设置状态键值对?
- visual-studio-code - VS Code 扩展和命令行工具
- python - 一次产生一个结果的生成器函数
- css - 如何选择用于导航栏组件的css angular 6
- python-3.x - 我正在尝试将一行文本附加到列表中
- configuration - 将pycharm配置到ubuntu 18.04的问题
- ruby-on-rails - 如何在 Rails 中正确上传 CSV 文件
- python - pandas DataFrame .stack(dropna=False) 但保留现有的级别组合
- python - 在列表中准确找到 3 个 x 实例和 2 个 y 实例的干净方法?