Angular HttpClient 调用缺少查询字符串和授权 header

Angular HttpClient calls are missing query string and Authorization header

当 Angular 使用 HttpClient 进行 GET 调用时,我们的 QA 环境中的请求缺少查询参数和授权 header。当 运行ning Angular 在本地指向 QA API 时,它会按预期发送它们。

查询参数的设置方式如下:

const params = new HttpParams().set('schedulingOnly', schedulingOnly ? 'true' : 'false');
return this.httpClient.get<any>(this.getBaseUrl() + '/domain/getAll', { params });

以下是授权 header 的设置方式(拦截器):

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {

    if (environment.useHttpMockRequestInterceptor) {
        return this.useMockData(request);
    } else {
        request = this.AddAuthenticationHeader(request);
        return next.handle(request);
    }
}

private AddAuthenticationHeader(request: HttpRequest<any>) {
    const request = request.clone({
        headers: request.headers
            .set('Authorization', 'Bearer ' + sessionStorage.getItem('access_token'))
    });

    return request;
}

以下是 Chrome 开发工具显示的内容:

这就是所有基本信息,但下面是关于我尝试过但未成功的事情的附加信息。

我也试过不带拦截器直接设置,但是没有成功。

const obj = {
  headers: { 'Authorization': 'Bearer ' + sessionStorage.getItem('access_token') },
  params: { 'schedulingOnly': schedulingOnly ? 'true' : 'false' }
};

return this.httpClient.get<any>(this.getBaseUrl() + '/domain/getAll', obj);

您是否尝试过在拦截器中添加 header 的较短版本:

const request = request.clone({ 
  setHeaders: { 'Authorization': 'Bearer ' + sessionStorage.getItem('access_token') } 
});

拦截器

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {

    if (environment.useHttpMockRequestInterceptor) {
        return this.useMockData(request);
    } else {
        request = this.AddAuthenticationHeader(request);
        return next.handle(request);
    }
}

private AddAuthenticationHeader(request: HttpRequest<any>) {

   return request.clone({
      setHeaders: {
        Authorization: `Bearer ${sessionStorage.getItem('access_token')}`
      }
    });

    return request;
}

问题是 PrototypeJs 干扰了 Angular。这导致了问题,但没有警告或错误,所以它只是默默地导致了这个问题。 PrototypeJs 用于包含 ASP.NET Web Forms 应用程序,Angular 嵌入其中。这是在本地工作但在 QA 中不起作用的原因是因为我实际上确实具有不加载 PrototypeJs 的功能,如果它是一个 Angular 页面,由于之前注意到其他问题,但由于之前注意到其他问题,但在 QA 中不起作用该网站从子路径开始,而不是直接在主机上,因此不加载 PrototypeJs 的功能不起作用。