Angular笔记--HttpClient-与服务器通讯

大多数前端应用都需要通过 HTTP 协议与后端服务器通讯。现代浏览器支持使用两种不同的 API 发起 HTTP 请求:XMLHttpRequest 接口和 fetch() API。

@angular/common/http中的HttpClient类为 Angular 应用程序提供了一个简化的 API 来实现 HTTP 客户端功能。它基于浏览器提供的 XMLHttpRequest 接口。

HttpClient带来的其它优点包括:可测试性、强类型的请求和响应对象、发起请求与接收响应时的拦截器支持,以及更好的、基于可观察(Observable)对象的 API 以及流式错误处理机制。

添加服务

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { map } from 'rxjs/operators';
//带类型检查的响应
export class HttpResult<T> {
 Data: T;
 Status: number;
}
@Injectable() export class ChannelService {
constructor(private http: HttpClient) { } getChannel(id: string) {
return this.http.post<HttpResult<any>>('api/Portal/Channel/Get', {id:id}).pipe( retry(3), // 对失败的 Observable 自动重新订阅几次 catchError(this.handleError) // then handle the error ); } }

添加请求头

很多服务器在进行保存型操作时需要额外的请求头。 比如,它们可能需要一个 Content-Type 头来显式定义请求体的 MIME 类型。 也可能服务器会需要一个认证用的令牌(token)。

@angular/common/http中的HttpHeaders类对象中就定义了一些这样的请求头

import { HttpHeaders } from '@angular/common/http';

const httpOptions = {
  headers: new HttpHeaders({
    'Content-Type':  'application/json',
    'Authorization': 'my-auth-token'
  })
};

发起一个 POST 请求

HttpClient.post()方法它包含一个资源 URL,还接受另外两个参数:

  • data- 要 POST 的请求体数据。

  • HTTPOtions - 这个例子中,该方法的选项指定了所需的请求头。

//保存表单数据
saveChannel(data) {
  return this.http.post<HttpResult<any>>('api/Portal/Channel/Save', data, httpOptions).pipe( 
   catchError(this.handleError) // then handle the error 
  );
}

猜你喜欢

转载自www.cnblogs.com/tingying/p/10985004.html