微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

获取HttpClient生成的url

如何解决获取HttpClient生成的url

如果我有一个指向 HttpClient 的 get observable 的指针,是否可以通过某种方式(通过内部变量等)获取它的请求 url?

我想在不重新发明轮子的情况下使用其生成查询。我知道这可能不是 cleanes 解决方案,但在我的场景中非常好,我已经为我的 REST API 生成了服务,只是想生成一个下载链接

解决方法

Angular HttpClient 的一些重载会返回 Observable<HttpResponse<T>>,只要您调用 HttpClient#get 参数设置为 observe"response" 重载。 See here

enter image description here

如果您选中 the documentation about Angular HttpResponse,您会看到它有一个 url 属性,并且可能包含您需要知道的内容

,

我稍微检查了 HttpClient 的代码,并承诺会创建一个 HttpRequest。无法通过获取此对象来获取属性。所以我用拦截器解决了这个问题:

@Injectable()
export class CancelRequestHttpInterceptor implements HttpInterceptor {

    static current: CancelRequestHttpInterceptor;

    constructor() { CancelRequestHttpInterceptor.current = this; }

    isActive = false;
    intercepted = new Subject<HttpRequest<any>>();

    intercept(request: HttpRequest<any>,next: HttpHandler): Observable<HttpEvent<any>> {
        if (this.isActive) { this.intercepted.next(request); return EMPTY; }
        return next.handle(request);
    }
}

在我做的组件中

try {
    let request: HttpRequest<any>;
    CancelRequestHttpInterceptor.current.isActive = true;
    CancelRequestHttpInterceptor.current.intercepted.pipe(first()).subscribe(v => request = v);
    this._reportService.exportReport(here,goes,my,params).subscribe();

    alert(request.urlWithParams);
}
finally {
    CancelRequestHttpInterceptor.current.isActive = false;
}

我猜,由于 JS 是单线程运行的,这个解决方案可以吗?

但是:为什么我使用静态变量而不使用 DI(我更喜欢)?因为在我的功能加载模块中,我无法解析 HttpInterceptor!我将创建一个新问题并将其链接到此处。

这里有什么改进吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?