我最近升级到了角度4,离子3。尝试在Web api上调用get方法时遇到了一些问题。奇怪的是,我在其他地方重复使用了此代码,并且效果很好。
我唯一的猜测可能是它与新的HTTPClient模块有关,或者与RxJS / map有关。
目前,我有一个看起来像这样的HttpInterceptor:
export class HttpInterceptor extends Http {
constructor(backend: ConnectionBackend, defaultOptions: RequestOptions, public authManager: AuthenticationProvider) {
super(backend, defaultOptions);
}
get(url: string, options?: RequestOptionsArgs): Observable<Response> {
console.log('request being made to:' + url);
var requestOptions = this.getRequestOptionArgs(options);
return super.get(url, requestOptions);
}
//...
}
这是我的HttpFactory
export function httpFactory(xhrBackend: XHRBackend, requestOptions:
RequestOptions, authManager: AuthenticationProvider): Http {
return new HttpInterceptor(xhrBackend, requestOptions, authManager);
}
在我的app.Module中,我已经在提供者中注册了因子,如下所示:
{ provide: Http, useFactory: httpFactory, deps: [XHRBackend, RequestOptions, AuthenticationProvider] }
我已经创建了一个与我的服务链接的提供者库,它具有方法GetList
getList(pageSize?: number, pageNumber?: number): Observable<Page<T>> {
const searchParams = this.GetSearchParams(pageSize, pageNumber);
const requestArguments: RequestOptionsArgs = new RequestOptions({ search: searchParams });
return this.http.get(`${this.apiUrl}/${this.route}`, requestArguments).map(res => {
const items = <T[]>res.json();
const mappedItems = items.map(e => this.mapEntity(e));
return mappedItems;
});
}
我称此为页面点击按钮
loadLocations() {
this.baseProvider.getList(10, 1).map(t => {
this.locations = t.items
});
}
当我运行加载位置时,已经遍历了代码,并且看到我的HTTP超级调用被调用了,控制台日志:
request being made to:http://localhost:50926/api/locations
但是,当我在chrome网络标签中查看时,什么都没有发送。此外,此代码是通用代码,可以在其他地方正常工作。
既然我已经升级到角度4,我必须坚持HTTP拦截器的新变化吗?
答案 0 :(得分:3)
您还需要订阅,否则将不会发出HTTP请求。
.map
仅用于转换响应。
答案 1 :(得分:0)
尝试类似这样的方法。
let API_ENDPOINT = "https://stackoverflow.com/";
let some_params = "params_here";
this.http.get(this.API_ENDPOINT + this.some_params).subscribe(res => {
console.log(res);
});
需要订阅您的请求。