我公司的Angular 4站点中的所有GET请求都使用“请求选项”,该选项也使用“自定义请求”。网站中的获取请求看起来像这样
return this.http.get('Excel/download?', options)
这将生成 www.site1.com / excel / download
大约有600个GET请求,所有请求都会在请求的开头添加www.site1.com,这就是我所期望的。
在所有这些获取请求中,除了www.site1.com之外,我只有一个请求,例如www.site2.com/excel/download
但是当我输入服务时获取请求
return this.http.get('http://www.site2.com/Excel/download?', options)
请求发送为
http://www。 site1 .com / http://www。 site2 .com / Excel / download?
对于所有服务请求,app模块都有以下内容,这就是提供固定获取请求的原因。
{provide: RequestOptions, useClass: CustomRequestOptions}
仅在这种情况下,我将如何覆盖它,所以我只将获取请求发送到www.site2。
CustomRequests
export class CustomRequestOptions extends BaseRequestOptions {
merge(options?: RequestOptionsArgs): RequestOptions {
options.url = AppSettings.API_ENDPOINT + options.url;
if (options.method === 'put' ||
options.method === 'post' ||
options.method === 'patch') {
let headers = options.headers;
headers['Content-Type'] = 'application/json';
options.headers = headers;
}
return super.merge(options);
}
}
答案 0 :(得分:1)
您可以增强RequestOptions merge
方法,以仅在域部分不存在的情况下添加域部分。一种简单的方法是检查字符串是否以http://
开头,更复杂的方法可以使用正则表达式来确保它也捕获https://
。
merge(options?: RequestOptionsArgs): RequestOptions {
if (options.url.indexOf('http://') !== 0) {
options.url = AppSettings.API_ENDPOINT + options.url;
}
if (options.method === 'put' ||
options.method === 'post' ||
options.method === 'patch') {
let headers = options.headers;
headers['Content-Type'] = 'application/json';
options.headers = headers;
}
return super.merge(options);
}
您现在可以在不添加this.http.get('http://www.site2.com/Excel/download?', options)
部分的情况下执行www.site1.com
,但是所有其他在开始时都没有域的请求仍将以http://www.site1.com