我在这样的角度服务部门发布了方法AuthService.ts
@Injectable({
providedIn: 'root'
})
export class AuthService {
...
...
login(username: string, password: string) {
let headers = new Headers(); //1
headers.append('username', username); //2
let options = {
headers: headers
}; //3
return this.http.post < any > (`${environment.authBaseUrl}`, {
username,
password
}, options) //4
.pipe(map(user => {
if (user && user.token) {
localStorage.setItem('currentUser', JSON.stringify(user));
this.currentUserSubject.next(user);
}
return user;
}));
}
}
我的目的是在POST请求标头中添加用户名。原因是在API中,期望在请求标头中找到用户名。在this post in StackOverflow的帮助下,我试图添加标题(从注释1到4)。我收到以下错误消息-
TS2345: 类型参数'{header:Headers; }'不能分配给类型参数'{header?:HttpHeaders | {[[header:string]:串[]; };观察?:“身体”;参数?:Ht ...'。 属性“标题”的类型不兼容。 类型'Header'不可分配给类型'HttpHeaders'| {[[header:string]:string串[]; }'。 类型“标头”不能分配给类型“ {{[标头:字符串]:字符串|串[]; }'。 索引签名缺少``标题''类型。
如果我从post方法中删除了option
,那么一切都会正常。
有人可以帮我吗?
预先感谢
答案 0 :(得分:2)
考虑使用HttpHeaders
。
例如:
(出于示例目的,我只放置了application/json
内容类型标题)。
import { HttpHeaders } from '@angular/common/http';
[...]
const httpOptions = {
headers: new HttpHeaders({ 'Content-Type': 'application/json', 'username': username)
};
[...]
return this.http.post<any>(`${environment.authBaseUrl}`, { username, password }, httpOptions) //4
.pipe(map(user => {
if (user && user.token) {
localStorage.setItem('currentUser', JSON.stringify(user));
this.currentUserSubject.next(user);
}
return user;
}));
答案 1 :(得分:2)
使用HttpHeaders
代替Headers
,
import { HttpHeaders } from '@angular/common/http';
let options = {
headers: new HttpHeaders({ 'username': username })
}