Angular的Http
模块曾经有一个RequestOptions
对象,该对象可以传递给它的get
方法(例如this.http.get(fooUrl, barOptions)
。RequestOptions
包含任何标头。这是deprecated。弃用的RequestOptions
的“最近替代品”是HttpRequest。
这有两个问题:
1. HttpRequest
有一个url
参数,因此它不等于RequestOptions
。实际上,它似乎封装了整个请求,但是我看不到它在任何地方使用,因此我猜测它只是一个内部类。.
2. HttpClient
的{{1}}方法不接受get
作为参数。
HttpRequest
的{{1}}方法的源代码如下:
HttpClient
现在可以在get
参数中使用某种类型吗?我应该只定义一个带有HttpHeaders的接口吗?如果没有它的类型,为什么不呢?
我的旧代码如下:
/**
* Constructs a `GET` request that interprets the body as an `ArrayBuffer` and returns the response in
* an `ArrayBuffer`.
*
* @param url The endpoint URL.
* @param options The HTTP options to send with the request.
*
* @return An `Observable` of the response, with the response body as an `ArrayBuffer`.
*/
get(url: string, options: {
headers?: HttpHeaders | {
[header: string]: string | string[];
};
observe?: 'body';
params?: HttpParams | {
[param: string]: string | string[];
};
reportProgress?: boolean;
responseType: 'arraybuffer';
withCredentials?: boolean;
}): Observable<ArrayBuffer>;
旧的options
模块中的 reqOptions.headers.set('Authorization', user.token);
reqOptions.headers.set('RefreshToken', user.refreshToken);
具有headers属性,并且是静态类型的。
P.S。我在这里阅读了答案,但没有使用类型: Angular4: Http -> HttpClient - requestOptions
答案 0 :(得分:0)
现在,我只是在应用程序中名为RequestOptions
的新文件中定义了“我自己的” request-options.ts
接口。接口定义如下,属性直接从Angular Library的client.d.ts
文件中取出,以匹配HttpClient
从options
参数对REST调用的期望:
import { HttpHeaders, HttpParams } from '@angular/common/http';
export interface RequestOptions {
headers?: HttpHeaders;
params?: HttpParams;
}
现在,我可以再次静态键入RequestOptions
,例如:
const requestOptions: RequestOptions = {
params: new HttpParams()
};
(上面的示例代码从此处引出:Angular4: Http -> HttpClient - requestOptions)
我不确定我是否完全遗漏了某些东西,还是应该针对角度仓库进行PR。如果没有理由,这似乎是一个相当明显的遗漏。
答案 1 :(得分:0)
这是我作为帮助服务编写的一些内容。我相信您可以扩展以传递任何显式标头。
export class ParamBuilderService {
buildParams(queryParams: Params, excludedValues ? : Array < string > ): HttpParams {
let params = new HttpParams();
for (const key in queryParams) {
if (queryParams.hasOwnProperty(key)) {
const value = queryParams[key];
if (excludedValues) {
const containExcludedValue = excludedValues.indexOf(value) !== -1;
if (!!value && !containExcludedValue) {
params = params.append(key, value);
}
} else if (!!value || value === 0) {
params = params.append(key, value);
}
}
}
return params;
}
}