Segue abaixo alguns método de infraestrutura (arquitetura) que costumo utilizar em minhas aplicações.
Especial atenção ao método deductHeader(), que basicamente retorna um HttpHeader com ou sem token, dependendo se existe um token no localStorage ou não. Se existir, a requisição irá incluir o token no header, caso contrário retorna um HttpHeader sem token. Mas isso pra vc é irrelevante, no teu caso considere que vc obtém o token da URL e inclui no header.
Não é demais citar que no meu caso eu armazeno no localStorage um objeto que representa o usuário e que tem nele o token, por isso o método getToken() pega o usuário no localStorage para aí sim obter o token, mas isso é irrelevante porque no seu caso vc obtém o token da URL diretamente.
Segue o código:
protected deductHeader() {
return {headers: this.hasToken() ? this.securityHeaders() : this.headers()};
}
protected headers(): HttpHeaders {
return new HttpHeaders({
'Content-Type': 'application/json'
});
}
protected securityHeaders(): HttpHeaders {
return new HttpHeaders({
'Content-Type': 'application/json',
'Authorization': this.getToken()
});
}
protected getCurrentUser() {
const ret = localStorage.getItem('currentUser');
if (ret) {
return JSON.parse(ret);
}
return null;
}
protected getToken(): string {
const currentUser = this.getCurrentUser();
if (currentUser) {
return currentUser.token;
}
return null;
}
hasToken(): boolean {
const jwt = this.getToken();
return jwt != null && jwt !== '';
}
Usando estes métodos utilitários, que estão em uma classe básica (super classe) das classes de serviço, o post poderia ser feito com o método abaixo:
incluirCliente(model: Cliente): Observable<Cliente> {
return this.httpClient.post<Cliente>(this.url(), JSON.stringify(model), this.deductHeader());
}
Bem, fazendo as devidas adaptações para a sua realidade, creio que poderá lhe ajudar.
Att.