我正在开发一个项目,需要迁移旧Http的所有实例以利用Angular提供的新HttpClient。 异步方法在DataService类中声明如下:
@Injectable()
export class DataService {
constructor(private http: Http) { }
async getAsync<T>(resource: string, options?: RequestOptions): Promise<T> {
return this.http
.get(resource, options)
.map((response: Response) => response.json())
.catch(this.handleError).toPromise();
}
并在其他服务类中使用,如下所示:
async getUser() {
try {
this.logger.debug('Getting User State...');
const userInfo = await this.dataService.getAsync<[Type Parameter]>(
this.constantService.urls.authenticatedUserUri, <RequestOptions>{ withCredentials: true }
);
this.logger.debug(JSON.stringify(userInfo));
this.authorizeUser(userInfo);
} catch (error) {
this.logger.debug(error);
}
}
我知道为了使用HttpClient,我需要在提供DataService类的模块中导入HttpClientModule,然后在服务本身内导入HttpClient并通过类的构造函数注入它。我也知道行.map((response: Response) => response.json() )
是不必要的,因为JSON现在是默认的响应类型。
我的主要问题是使用什么来代替HttpClient模块不再支持的RequestOptions对象。我假设我必须使用HttpHeaders和/或HttpParams RequestOptions,但我不确定实现。第<RequestOptions>{ withCredentials: true }
行也让我失望。
我将继续研究并浏览文档以尝试找到合适的解决方案,但我感谢您对此特定问题的任何帮助。谢谢!
答案 0 :(得分:2)
不再输入选项
只需将RequestOptions
替换为any
。
在文档中,您可以看到以下内容:
request(first: string|HttpRequest<any>, url?: string, options: {
body?: any,
headers?: HttpHeaders|{[header: string]: string | string[]},
observe?: HttpObserve,
params?: HttpParams|{[param: string]: string | string[]},
reportProgress?: boolean,
responseType?: 'arraybuffer'|'blob'|'json'|'text',
withCredentials?: boolean,
} = {}): Observable<any>
如您所见,withCredentials
仍然可用且options
没有类型