小编典典

向 Angular HttpClient 添加 HTTP 标头不会发送标头,为什么?

all

这是我的代码:

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

logIn(username: string, password: string) {
    const url = 'http://server.com/index.php';
    const body = JSON.stringify({username: username,
                                 password: password});
    const headers = new HttpHeaders();
    headers.set('Content-Type', 'application/json; charset=utf-8');
    this.http.post(url, body, {headers: headers}).subscribe(
        (data) => {
            console.log(data);
        },
        (err: HttpErrorResponse) => {
            if (err.error instanceof Error) {
                console.log('Client-side error occured.');
            } else {
                console.log('Server-side error occured.');
            }
        }
    );
}

这里是网络调试:

Request Method:POST
Status Code:200 OK
Accept:application/json, text/plain, */*
Accept-Encoding:gzip, deflate
Accept-Language:en-US,en;q=0.8
Cache-Control:no-cache
Connection:keep-alive
Content-Length:46
Content-Type:text/plain

并且数据存储在“请求有效负载”中,但在我的服务器中没有收到 POST 值:

print_r($_POST);
Array
(
)

我相信错误来自 POST 期间未设置的标头,我做错了什么?


阅读 57

收藏
2022-06-07

共1个答案

小编典典

HttpHeader类的实例是 不可变 对象。调用类方法将返回一个新实例作为结果。所以基本上,您需要执行以下操作:

let headers = new HttpHeaders();
headers = headers.set('Content-Type', 'application/json; charset=utf-8');

或者

const headers = new HttpHeaders({'Content-Type':'application/json; charset=utf-8'});

更新:添加多个标题

let headers = new HttpHeaders();
headers = headers.set('h1', 'v1').set('h2','v2');

或者

const headers = new HttpHeaders({'h1':'v1','h2':'v2'});

更新:接受 HttpClient 标头和参数的对象映射

由于5.0.0-beta.6现在可以跳过HttpHeaders对象的创建,直接将对象映射作为参数传递。因此,现在可以执行以下操作:

http.get('someurl',{
   headers: {'header1':'value1','header2':'value2'}
});
2022-06-07