angular v5.1.0 HttpClient未设置标题内容类型:application/json
我正在尝试将post api的标题设置为application.jsonangular v5.1.0 HttpClient未设置标题内容类型:application/json,angular,httpclient,Angular,Httpclient,我正在尝试将post api的标题设置为application.json let options: { headers?: {'Content-Type':'application/json'} } 但未设置。在此处尝试此代码=> let header = {'Content-Type':'application/json'} 看看这个 import {Http, Response, Headers, RequestOptions} from "@angular/http"; 及 用于
let options: { headers?: {'Content-Type':'application/json'} }
但未设置。在此处尝试此代码=>
let header = {'Content-Type':'application/json'}
看看这个
import {Http, Response, Headers, RequestOptions} from "@angular/http";
及
用于Http调用。以下是一个示例:
public _funName( _params ): Observable<void> {
const headers = new Headers( { 'Content-Type': 'application/json' } // set your header);
/* The option withCredentials: true in the code bellow is used with the CORS variables, that is when the REST functions are on another server then Node.js and the Angular2 development application. */
const options = new RequestOptions( { headers: headers, withCredentials: true } );
return this.http.post( _yourLink, _params, options )
.map( this.extractData )
.catch( this.handleError );
}
public extractData( res: Response ) {
const body = res.json();
// const body = res;
return body || {};
}
public handleError( error: Response | any ) {
let errMsg: string;
if ( error instanceof Response ) {
const body = error.json() || '';
const err = body.error || JSON.stringify( body );
errMsg = `${error.status} - ${error.statusText || ''} ${err}`;
} else {
errMsg = error.message ? error.message : error.toString();
}
console.error( errMsg );
return Observable.throw( errMsg );
}
public\u funName(\u参数):可观察{
const headers=新的头({'Content Type':'application/json'}//设置头);
/*下面代码中的选项withCredentials:true与CORS变量一起使用,即当REST函数位于另一台服务器上时,然后是Node.js和Angular2开发应用程序*/
const options=newrequestoptions({headers:headers,withCredentials:true});
返回此.http.post(_yourLink,_params,options)
.map(this.extractData)
.接住(这个.把手错误);
}
公共数据(res:Response){
const body=res.json();
//const body=res;
返回体| |{};
}
公共句柄错误(错误:响应|任意){
让errMsg:string;
if(响应的错误实例){
const body=error.json();
const err=body.error | | JSON.stringify(body);
errMsg=`${error.status}-${error.statusText | |'''}${err}`;
}否则{
errMsg=error.message?error.message:error.toString();
}
控制台错误(errMsg);
返回可观察抛出(errMsg);
}
我希望这将对您有所帮助。要使用新的HttpClient类定义内容类型,您需要:
@angular/common/http
导入(而不是从当前标记为不推荐的@angular/http
导入)从'@angular/common/http'导入{HttpClient,HttpHeaders};
HttpClient
:构造函数(私有http:HttpClient){
标题
以定义所需的内容类型,并定义选项
以准备调用时使用的对象:private options={headers:new-HttpHeaders().set('Content-Type','application/json')};
this.http.post('your target url',yourBodyObject,this.options)
其中,
“您的目标url”
和您的BodyObject
仅用作示例,需要替换为您的真实数据。在Angular文档中有一个关于此的部分-可能是最近添加的:
从'@angular/common/http'导入{HttpHeaders};
常量httpOptions={
标题:新的HttpHeaders({
“内容类型”:“应用程序/json”,
“授权”:“我的身份验证令牌”
})
};
当我尝试使用上述格式向httpOptions添加响应类型时,TypeScript向我发出警告,因此我成功地使用了以下内容:
let headers=新的HttpHeaders({
“内容类型”:“应用程序/文本”
});
返回此.http.get(url,{responseType:'text',headers})
文档操作代码片段:
let options: { headers?: {'Content-Type':'application/json'} }
正在定义类型为{headers?:{'Content-type':'application/json'}}
的选项变量,该变量有效,但不是您想要的。将:
更改为=
以使其成为作业,并删除了对作业无效的?
。这是合法的,最接近OP的尝试,应该有效:
let options = { headers: {'Content-Type':'application/json'} };
如果您使用的是
http.put()
,则使用以下代码并接收json/纯文本:
const httpOpt = {
headers: new HttpHeaders({
'Content-Type': 'application/json',
'Accept': 'application/json, text/plain'
})
};
this.http.put('http://localhost:8080/bookapi/api/book/'+id, JSON.stringify(requestObj), httpOpt);
这就是我在user.service.ts中获取用户详细信息的方式 导入:
import {HttpClient, HttpHeaders} from '@angular/common/http';
import {Observable} from 'rxjs/Observable';
import {Injectable} from '@angular/core';
在类内声明变量:
@Injectable()
export class UserService {
private httpHeaders = new HttpHeaders().set('Content-Type','application/json');
protected options = {headers: this.httpHeaders,
search:{}
};
constructor(private http: HttpClient) {
}
/**
* getting user details
* @returns {Observable<any>}
*/
getUser(): Observable<any>{
return this.http.get('userApi/').catch(err => this.errorHandler(err));
}
/**
*
* @param error
* @returns {any}
*/
errorHandler(error: any): any {
if (error.status < 400) {
return Observable.throw(new Error(error.status));
}
}
}
@Injectable()
导出类用户服务{
private-httpHeaders=new-httpHeaders().set('Content-Type','application/json');
受保护的选项={headers:this.httpHeaders,
搜索:{}
};
构造函数(专用http:HttpClient){
}
/**
*获取用户详细信息
*@returns{Observable}
*/
getUser():可观察{
返回this.http.get('userApi/').catch(err=>this.errorHandler(err));
}
/**
*
*@param错误
*@returns{any}
*/
errorHandler(错误:any):any{
如果(错误状态<400){
返回Observable.throw(新错误(Error.status));
}
}
}
我们可以通过创建新的HttpHeaders对象来定义请求头
HttpHeaders对象本质上是不可变的。因此,在同一行中设置所有标题详细信息
getUser(name: string, age: string) {
const params = new HttpParams().set('name', name).set('age', age);
const headers = new HttpHeaders()
.set('Content-Type', 'application/json')
.set('Authorization', 'my token');
return this.http
.get(`${endPoint}/user`, {
params,
headers
});
}
您提供的导入是针对“Http”而不是“HttpClient”类的。此示例是针对“Http”类的,而不是针对“HttpClient”@MarkHim请不要添加不尊重的无用注释,如“代码格式”。直接回答。
@Injectable()
export class UserService {
private httpHeaders = new HttpHeaders().set('Content-Type','application/json');
protected options = {headers: this.httpHeaders,
search:{}
};
constructor(private http: HttpClient) {
}
/**
* getting user details
* @returns {Observable<any>}
*/
getUser(): Observable<any>{
return this.http.get('userApi/').catch(err => this.errorHandler(err));
}
/**
*
* @param error
* @returns {any}
*/
errorHandler(error: any): any {
if (error.status < 400) {
return Observable.throw(new Error(error.status));
}
}
}
getUser(name: string, age: string) {
const params = new HttpParams().set('name', name).set('age', age);
const headers = new HttpHeaders()
.set('Content-Type', 'application/json')
.set('Authorization', 'my token');
return this.http
.get(`${endPoint}/user`, {
params,
headers
});
}