首页 > 解决方案 > Angular 4覆盖基本网址获取请求

问题描述

我公司的 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网站1 .com / http://wwwsite2 .com/Excel/下载?

app 模块对所有服务请求都有以下内容,这就是提供固定获取请求的内容。

{provide: RequestOptions, useClass: CustomRequestOptions}

仅对于这种情况,我将如何覆盖它,所以我只需向 www.site2 发送一个获取请求。

自定义请求

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);
    }

}

标签: angular

解决方案


merge如果还没有现有的域部分,您可以增强 RequestOptions方法以仅在域部分之前添加。一种天真的方法是检查字符串是否以开头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


推荐阅读