问题 如何在Angular2中设置默认HTTP标头?


我知道如何使用。为单个HTTP调用设置标头 标题类

有没有办法做到这一点 所有 HTTP调用?


10614
2018-01-23 21:48


起源



答案:


我看到两种方法:

  • 选项1: 使用 BaseRequestOptions 类

您可以扩展此类并设置标头以用于每个请求:

@Injectable()
export class DefaultRequestOptions extends BaseRequestOptions{
    headers:Headers = new Headers({
        'Content-Type': 'application/x-www-form-urlencoded'
    });
}

并按如下所述注册:

bootstrap(AppComponent,[
    HTTP_PROVIDERS,
    provide( RequestOptions, { useClass: DefaultRequestOptions })
});
  • 选项#2:延长 Http 阶级本身

你也可以延长 Http class,并在其中设置所需的标头,如下所述:

@Injectable()
export class CustomHttp extends Http {
  constructor(backend: ConnectionBackend, defaultOptions: RequestOptions) {
    super(backend, defaultOptions);
  }

  request(url: string | Request, options?: RequestOptionsArgs): Observable<Response> {
    return super.request(url, options);        
  }

  get(url: string, options?: RequestOptionsArgs): Observable<Response> {
    // Add headers into options
    (...)
    return super.get(url, options);
  }

  (...)
}

并按如下所述注册:

bootstrap(AppComponent, [
  HTTP_PROVIDERS,
  provide(Http, {
    useFactory: (backend: XHRBackend, defaultOptions: RequestOptions) => new CustomHttp(backend, defaultOptions),
    deps: [XHRBackend, RequestOptions]
  })
]);

希望它能帮到你, 蒂埃里


13
2018-01-24 18:30



有没有办法可以修改服务中的return observable。比如改变请求开始或结束时会发生什么?我们将如何做到这一点? - xmaestro
总之,我们可以修改返回的observable吗? - xmaestro
使用选项2,这里有关于通过扩展Http类添加默认http标头(并捕获http错误)的综合指南 - adonespitogo.com/articles/angular-2-extending-http-provider - Adones Pitogo
选项#1 - 针对当前的Angular版本进行了更新 - 如果您关注标题(和其他请求选项),则更容易实现。官方Angular文档推荐它( HTTP指南 会在几天内说出来。完整的请求和响应拦截是另一回事。翅膀上有一个为此目的的文件。敬请关注(2017年1月 - ish)。 - Ward


答案:


我看到两种方法:

  • 选项1: 使用 BaseRequestOptions 类

您可以扩展此类并设置标头以用于每个请求:

@Injectable()
export class DefaultRequestOptions extends BaseRequestOptions{
    headers:Headers = new Headers({
        'Content-Type': 'application/x-www-form-urlencoded'
    });
}

并按如下所述注册:

bootstrap(AppComponent,[
    HTTP_PROVIDERS,
    provide( RequestOptions, { useClass: DefaultRequestOptions })
});
  • 选项#2:延长 Http 阶级本身

你也可以延长 Http class,并在其中设置所需的标头,如下所述:

@Injectable()
export class CustomHttp extends Http {
  constructor(backend: ConnectionBackend, defaultOptions: RequestOptions) {
    super(backend, defaultOptions);
  }

  request(url: string | Request, options?: RequestOptionsArgs): Observable<Response> {
    return super.request(url, options);        
  }

  get(url: string, options?: RequestOptionsArgs): Observable<Response> {
    // Add headers into options
    (...)
    return super.get(url, options);
  }

  (...)
}

并按如下所述注册:

bootstrap(AppComponent, [
  HTTP_PROVIDERS,
  provide(Http, {
    useFactory: (backend: XHRBackend, defaultOptions: RequestOptions) => new CustomHttp(backend, defaultOptions),
    deps: [XHRBackend, RequestOptions]
  })
]);

希望它能帮到你, 蒂埃里


13
2018-01-24 18:30



有没有办法可以修改服务中的return observable。比如改变请求开始或结束时会发生什么?我们将如何做到这一点? - xmaestro
总之,我们可以修改返回的observable吗? - xmaestro
使用选项2,这里有关于通过扩展Http类添加默认http标头(并捕获http错误)的综合指南 - adonespitogo.com/articles/angular-2-extending-http-provider - Adones Pitogo
选项#1 - 针对当前的Angular版本进行了更新 - 如果您关注标题(和其他请求选项),则更容易实现。官方Angular文档推荐它( HTTP指南 会在几天内说出来。完整的请求和响应拦截是另一回事。翅膀上有一个为此目的的文件。敬请关注(2017年1月 - ish)。 - Ward


你不能使用像 $httpProvider 对于angular1,你可以创建自己的 CustomHttp 扩展/包装默认值的类 Http 并添加标题。

看一眼 AuthHttp 源代码来自 angular2-jwt 图书馆: https://github.com/auth0/angular2-jwt/blob/master/angular2-jwt.ts


3
2018-01-23 21:57