Angular 4覆盖基本网址获取请求

时间:2018-08-28 14:59:43

标签: angular

我公司的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);
    }

}

1 个答案:

答案 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